2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
p1 p2
1 -> 1 -> 2 -> 3 -> 3 -> nollap1.val == p2.val poista sitten p2. Huomaa, että p1 pysyy muuttumattomana tällä hetkellä
p1 p2
1 -> 2 -> 3 -> 3 -> nollap1.val != p2.val Sitten p1, p2 siirtyvät taaksepäin
p1 p2
1 -> 2 -> 3 -> 3 -> nolla
p1 p2
1 -> 2 -> 3 -> 3 -> nollap1.val == p2.val poista sitten p2
p1 p2
1 -> 2 -> 3 -> nollaKun p2 == null, poistu silmukasta
koodi
- public ListNode deleteDuplicates(ListNode head) {
- // 链表节点 < 2
- if (head == null || head.next == null) {
- return head;
- }
- // 链表节点 >= 2
- ListNode p1 = head;
- ListNode p2;
- while ((p2 = p1.next) != null) {
- if (p1.val == p2.val) {
- p1.next = p2.next;
- } else {
- p1 = p1.next;
- }
- }
- return head;
- }
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, nollap1 p2 p3
s, 1, 1, 1, 2, 3, nollap1 p2 p3
s, 1, 1, 1, 2, 3, nollap1 p3
s, 2, 3, nollap1 p2 p3
s, 2, 3, nollap1 p2 p3
s, 2, 3, nolla
koodi
- public ListNode deleteDuplicates(ListNode head) {
- if (head == null || head.next == null) {
- return head;
- }
-
- ListNode s = new ListNode(-1, head);
- ListNode p1 = s;
- ListNode p2;
- ListNode p3;
- while ((p2 = p1.next) != null && (p3 = p2.next) != null) {
- if (p2.val == p3.val) {
- while ((p3 = p3.next) != null
- && p3.val == p2.val) {
- }
- p1.next = p3;
- } else {
- p1 = p1.next;
- }
- }
- return s.next;
- }