由于头节点的值可能也会重复,所以新建一个空节点指向头.
每次定义一个now指针和front指针,now指针指向现在已知非重复的节点,front指针从now指针下一个开始判断下一个是不是存在重复,若重复,一直向前.若front位置改变了,则now->next赋值为front->next,但是now不用动(把中间重复的部分去掉了);否则,now正常向前进.
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
if(!head||!head->next)return head;
ListNode* start=new ListNode(0);
start->next=head;
ListNode* now=start;
while(now->next){
ListNode* front=now->next;
while(front->next&&front->next->val==front->val) front=front->next;
if(front!=now->next) now->next=front->next;
else now=now->next;
}
return start->next;
}
};