Κοινή χρήση τεχνολογίας

Διέταξε την κατάργηση διπλότυπων συνδεδεμένων λιστών του Λίκου

2024-07-12

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

Διαγράψτε τα διπλά στοιχεία στη συνδεδεμένη λίστα και διατηρήστε ένα διπλότυπο στοιχείο

p1 p2
1 -> 1 -> 2 -> 3 -> 3 -> μηδενικό

p1.val == p2.val στη συνέχεια διαγράψτε το p2, σημειώστε ότι το p1 παραμένει αμετάβλητο αυτήν τη στιγμή

p1 p2
1 -> 2 -> 3 -> 3 -> μηδενικό

p1.val != p2.val Στη συνέχεια, τα p1, p2 κινούνται προς τα πίσω

p1 p2
1 -> 2 -> 3 -> 3 -> μηδενικό
         
p1 p2
1 -> 2 -> 3 -> 3 -> μηδενικό

p1.val == p2.val και στη συνέχεια διαγράψτε το p2

p1 p2
1 -> 2 -> 3 -> μηδενικό

Όταν p2 == null βγείτε από τον βρόχο

κώδικας

  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. }

Μην διατηρείτε διπλά στοιχεία

Ο p1 είναι ο προηγούμενος κόμβος που πρέπει να διαγραφεί. Κάθε κύκλος συγκρίνει τις τιμές του p2 και του p3.

  • Εάν οι τιμές των p2 και p3 επαναλαμβάνονται, τότε το p3 συνεχίζει να μετακινείται προς τα πίσω έως ότου βρεθεί ένας κόμβος που δεν είναι διπλότυπος με το p2 και το p1 δείχνει στο p3 για να ολοκληρωθεί η διαγραφή.

  • Εάν οι τιμές των p2 και p3 δεν επικαλύπτονται, τα p1, p2 και p3 μετατοπίζονται προς τα πίσω κατά μία θέση και συνεχίζουν την παραπάνω λειτουργία.

  • Το p2 ή το p3 είναι μηδενικό, βγείτε από τον βρόχο

    • Όταν το p2 είναι null, για παράδειγμα, η συνδεδεμένη λίστα είναι 1 1 1 null

 

p1 p2 p3
s, 1, 1, 1, 2, 3, null

p1 p2 p3
s, 1, 1, 1, 2, 3, null

p1 p2 p3
s, 1, 1, 1, 2, 3, null

p1 p3
s, 2, 3, null

p1 p2 p3
s, 2, 3, null

p1 p2 p3
s, 2, 3, null

κώδικας

  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. }