java:
pre指向结果的尾巴,node和next用于过滤重复的节点
class Solution {
public ListNode deleteDuplicates(ListNode head) {
if (head == null)
return head;
ListNode pre = new ListNode(-1);
ListNode res = pre;
ListNode node = head, next = head.next;
while (next != null) {//1->2->3->3->4->4->5
if (node.val != next.val) {
pre.next = node;//node和val不同说明这个节点可以加入
pre = node;
node = next;
next = next.next;
}
else {//node放在过滤重复元素的下一个节点,next放在node下一个
while (next != null && node.val == next.val) {
next = next.next;
}
node = next;
if (next == null)//防止结尾出现重复元素1->2->3->3
break;
next = next.next;
}
}
pre.next = node;//注!!循环结束没有把最后的节点绑上
return res.next;
}
}