82.删除排序链表中的重复元素II
难度:中等
标签:链表
给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。
示例 1:
输入: 1->2->3->3->4->4->5
输出: 1->2->5
示例 2:
输入: 1->1->1->2->3
输出: 2->3
public ListNode deleteDuplicates(ListNode head) {
//为空或者只有一个结点
if(head==null||head.next==null)
return head;
//申请一个临时结点,充当头结点,可以用来删除首元素
ListNode tmpHead = new ListNode(-1);
tmpHead.next = head;
ListNode p,q;
//p,q分别是快慢指针
q=tmpHead;
p=head;
while(p!=null&&p.next!=null){
//如果p和下一个元素不相同,q移动到p的位置上,p后移
if(p.next.val!=p.val){
q=p;
p=p.next;
}
else {
//如果相同,接着往下寻找相同,直接不相同,或者已经到了结尾
while(p.next!=null&&p.next.val==p.val){
p=p.next;
}
//删除这些相同的元素
q.next=p.next;
//p后移
p=p.next;
}
}
return tmpHead.next;
}