题目:Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.
Given 1->2->3->3->4->4->5,
return 1->2->5.
Given 1->1->1->2->3,
return 2->3.
思路:开头设立节点,指向原先的开头。非常巧妙。
代码:
class Solution
{
public:
ListNode *deleteDuplicates(ListNode *head){
//https://leetcode.com/problems/remove-duplicates-from-sorted-list-ii/
if (head==NULL||head->next==NULL){
return head;
}
ListNode *dummy=new ListNode(0);
dummy->next=head;
ListNode *p=dummy;//避免我的前面程序在一开头判断是否有连续相同数字
while (p->next!=NULL&&p->next->next!=NULL){
//这样子,出现[1 1]就不会出现问题,实在是厉害。
if (p->next->val==p->next->next->val){
int v=p->next->val;
while (p->next!=NULL&&p->next->val==v){
ListNode *tmp=p->next;
p->next=tmp->next;
delete tmp;
}//既然有相等值,那就记录第一个,后面一直判断
}
else{
p=p->next;
}
}
head=dummy->next;
delete dummy;
return head;
}
};