Problem
Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.
Example
Given 1->2->3->3->4->4->5, return 1->2->5.
Given 1->1->1->2->3, return 2->3.
思路
- 需要加入dummy node
- 因为头节点可能会被删除, 程序也有可能返回null.
- if we found current node's value equals its next node's value, we iteratively delete cur node.
- because we want to delete current node, we need a variable to record the its value.
public static ListNode deleteDuplicates(ListNode head) {
ListNode dummy = new ListNode(0);
dummy.next = head;
ListNode prev = dummy;
ListNode curt = head;
while (curt != null && curt.next != null) {
if (curt.val == curt.next.val) {
int dup = curt.val;
while (curt != null && curt.val == dup) {
prev.next = curt.next;
curt = curt.next;
}
} else {
prev = curt;
curt = curt.next;
}
}
return dummy.next;
}