题目:
Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.
For example,
Given 1->2->3->3->4->4->5
, return 1->2->5
.
Given 1->1->1->2->3
, return 2->3
.
这题比上一题稍微复杂一点,我们需要额外的保存一个指针last指向最后一个没有重复的节点,初始化为null。并且遍历时cur每次移动到下一个不等于pre的节点,而并非每次移动一步。
只有当pre.next == cur时,才说明pre没有重复,这时,可以令last.next = pre(如果last还是空的话就直接赋值给last)
public static ListNode deleteDuplicates(ListNode head) {
if(head == null) return null;
ListNode newhead = null;
ListNode lastNode = null;
ListNode pre = head;
ListNode cur = head.next;
while(pre != null){
while(cur != null && cur.val == pre.val){
cur = cur.next;
}
if(pre.next == cur){
if(lastNode == null){
newhead = pre;
lastNode = newhead;
}
else{
lastNode.next = pre;
lastNode = lastNode.next;
}
}
pre = cur;
if(cur != null)
cur = cur.next;
}
lastNode.next = null;
return newhead;
}