2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
p1 p2
1 -> 1 -> 2 -> 3 -> 3 -> nulp1.val == p2.val puis supprimez p2, notez que p1 reste inchangé à ce moment
p1 p2
1 -> 2 -> 3 -> 3 -> nulp1.val != p2.val Puis p1, p2 reculent
p1 p2
1 -> 2 -> 3 -> 3 -> nul
p1 p2
1 -> 2 -> 3 -> 3 -> nulp1.val == p2.val puis supprimez p2
p1 p2
1 -> 2 -> 3 -> nulQuand p2 == null quitte la boucle
code
- 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 est le nœud précédent à supprimer. Chaque cycle compare les valeurs de p2 et p3.
Si les valeurs de p2 et p3 sont répétées, alors p3 continue de reculer jusqu'à ce qu'un nœud qui n'est pas dupliqué avec p2 soit trouvé, et p1 pointe vers p3 pour terminer la suppression.
Si les valeurs de p2 et p3 ne se chevauchent pas, p1, p2 et p3 sont décalés vers l'arrière d'une position et continuent l'opération ci-dessus.
p2 ou p3 est nul, quittez la boucle
Lorsque p2 est nul, par exemple, la liste chaînée est 1 1 1 null
p1 p2 p3
s, 1, 1, 1, 2, 3, nulp1 p2 p3
s, 1, 1, 1, 2, 3, nulp1 p2 p3
s, 1, 1, 1, 2, 3, nulp1 p3
s, 2, 3, nulp1 p2 p3
s, 2, 3, nulp1 p2 p3
s, 2, 3, nul
code
- 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;
- }