Teknologian jakaminen

Likoun tilaama linkitetyn luettelon kopioinnin poisto

2024-07-12

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

Poista päällekkäiset elementit linkitetystä luettelosta ja säilytä yksi kaksoiskappale

p1 p2
1 -> 1 -> 2 -> 3 -> 3 -> nolla

p1.val == p2.val poista sitten p2. Huomaa, että p1 pysyy muuttumattomana tällä hetkellä

p1 p2
1 -> 2 -> 3 -> 3 -> nolla

p1.val != p2.val Sitten p1, p2 siirtyvät taaksepäin

p1 p2
1 -> 2 -> 3 -> 3 -> nolla
         
p1 p2
1 -> 2 -> 3 -> 3 -> nolla

p1.val == p2.val poista sitten p2

p1 p2
1 -> 2 -> 3 -> nolla

Kun p2 == null, poistu silmukasta

koodi

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

Älä säilytä päällekkäisiä elementtejä

p1 on edellinen poistettava solmu. Jokainen sykli vertaa p2:n ja p3:n arvoja.

  • Jos p2:n ja p3:n arvot toistetaan, p3 jatkaa liikkumista taaksepäin, kunnes löydetään solmu, jota ei ole kopioitu p2:n kanssa, ja p1 osoittaa p3:een deleetion loppuunsaattamiseksi.

  • Jos p2:n ja p3:n arvot eivät mene päällekkäin, p1, p2 ja p3 siirretään yhden aseman verran taaksepäin ja jatkavat yllä olevaa toimenpidettä.

  • p2 tai p3 on nolla, poistu silmukasta

    • Kun p2 on esimerkiksi tyhjä, linkitetty lista on 1 1 1 tyhjä

 

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

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

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

p1 p3
s, 2, 3, nolla

p1 p2 p3
s, 2, 3, nolla

p1 p2 p3
s, 2, 3, nolla

koodi

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