Berbagi teknologi

Deduplikasi daftar tertaut yang dipesan Likou

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Hapus elemen duplikat dalam daftar tertaut dan pertahankan satu elemen duplikat

hal 1 hal 2
1 -> 1 -> 2 -> 3 -> 3 -> nol

p1.val == p2.val lalu hapus p2, perhatikan bahwa p1 tetap tidak berubah saat ini

hal 1 hal 2
1 -> 2 -> 3 -> 3 -> nol

p1.val != p2.val Lalu p1, p2 mundur

hal 1 hal 2
1 -> 2 -> 3 -> 3 -> nol
         
hal 1 hal 2
1 -> 2 -> 3 -> 3 -> nol

p1.val == p2.val lalu hapus p2

hal 1 hal 2
1 -> 2 -> 3 -> nol

Ketika p2 == null keluar dari loop

kode

  1. public ListNode deleteDuplicates(ListNode head) {
  2. // 链表节点 < 2
  3. if (head == null || head.next == null) {
  4. return head;
  5. }
  6. // 链表节点 >= 2
  7. ListNode p1 = head;
  8. ListNode p2;
  9. while ((p2 = p1.next) != null) {
  10. if (p1.val == p2.val) {
  11. p1.next = p2.next;
  12. } else {
  13. p1 = p1.next;
  14. }
  15. }
  16. return head;
  17. }

Jangan simpan elemen duplikat apa pun

p1 adalah node sebelumnya yang akan dihapus. Setiap siklus membandingkan nilai p2 dan p3.

  • Jika nilai p2 dan p3 diulang, maka p3 terus bergerak mundur hingga ditemukan node yang tidak terduplikasi dengan p2, dan p1 menunjuk ke p3 untuk menyelesaikan penghapusan.

  • Jika nilai p2 dan p3 tidak tumpang tindih, p1, p2, dan p3 digeser mundur satu posisi dan melanjutkan operasi di atas.

  • p2 atau p3 adalah null, keluar dari loop

    • Jika p2 bernilai nol, misalnya, daftar tertaut adalah 1 1 1 nol

 

hal 1 hal 2 hal 3
s, 1, 1, 1, 2, 3, nol

hal 1 hal 2 hal 3
s, 1, 1, 1, 2, 3, nol

hal 1 hal 2 hal 3
s, 1, 1, 1, 2, 3, nol

hal 1 hal 3
s, 2, 3, nol

hal 1 hal 2 hal 3
s, 2, 3, nol

hal 1 hal 2 hal 3
s, 2, 3, nol

kode

  1. public ListNode deleteDuplicates(ListNode head) {
  2. if (head == null || head.next == null) {
  3. return head;
  4. }
  5. ListNode s = new ListNode(-1, head);
  6. ListNode p1 = s;
  7. ListNode p2;
  8. ListNode p3;
  9. while ((p2 = p1.next) != null && (p3 = p2.next) != null) {
  10. if (p2.val == p3.val) {
  11. while ((p3 = p3.next) != null
  12. && p3.val == p2.val) {
  13. }
  14. p1.next = p3;
  15. } else {
  16. p1 = p1.next;
  17. }
  18. }
  19. return s.next;
  20. }