给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。
示例 1:
输入: 1->2->3->3->4->4->5
输出: 1->2->5
示例 2:
输入: 1->1->1->2->3
输出: 2->3
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
if(!head || !head->next) return head;
ListNode *dummy=new ListNode(0), *p=dummy, *q=head;
dummy->next=head;
while(q){
int flag=0;
while(q->next && q->next->val==q->val){//删除后面重复的元素
q->next=q->next->next; // 或者 q=q->next; 也可以,不删除,只移动
flag=1;
}
if(flag){//删除第一个重复的元素
p->next=q->next;
}
else{//如果没遇到重复元素,直接往后面找
p=q;
}
q=q->next;
}
return dummy->next;
}
};