题解 | #删除有序链表中重复的元素-II#
删除有序链表中重复的元素-II
https://www.nowcoder.com/practice/71cef9f8b5564579bf7ed93fbe0b2024
import java.util.*; /* * public class ListNode { * int val; * ListNode next = null; * public ListNode(int val) { * this.val = val; * } * } */ public class Solution { public ListNode deleteDuplicates(ListNode head) { if (head == null) return null; ListNode dummy = new ListNode(0); dummy.next = head; ListNode prev = dummy; ListNode curr = head; while (curr != null && curr.next != null) { if (curr.val == curr.next.val) { int val = curr.val; while (curr.next != null && curr.next.val == val) { curr = curr.next; } prev.next = curr.next; curr = curr.next; } else { prev = curr; curr = curr.next; } } return dummy.next; } }
就是curr.var与curr.next.var相比,唯一要注意的是每次都要移动2格以上,都要判断curr.next!=null,一旦curr.next==null,就说明已经到了末尾了,不能再进行多格移动了,这个对防止出现NullPointerException非常重要;另一个就是要int var=curr.var因为要防止出现奇数个重复的情况把curr与curr.next删了那么剩下的那个值就会被误判为非重复值。
这就是我犯的错了,算法练习第二题,写的比较艰难,加油!