82. Remove Duplicates from Sorted List II
Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.
For example,
Given1->2->3->3->4->4->5, return1->2->5.
Given1->1->1->2->3, return2->3.
思路:仍然是双指针,但是由于head可能被删掉,所以需要一个dummy head开头。精妙之处在于遇到block要跳过
public class Solution {
public ListNode deleteDuplicates(ListNode head) {
ListNode newHead = new ListNode(0);
newHead.next = head;
ListNode prev = newHead;
ListNode curr = head;
while(curr!=null){
//move a block
while(curr.next!=null&&curr.val==curr.next.val){
curr = curr.next;
}
if (prev.next==curr){
prev = curr;
}else{
prev.next = curr.next;
}
curr = curr.next;
}
return newHead.next;
}
}