思路1:
新建一个头节点,值为头节点值-1.如果当前节点有重复,就删除节点指直到不重复的,将当前节点的前一个节点的指针指向不重复的,保持链表不断。
ListNode *deleteDuplicates(ListNode *head) {
if(head==NULL||head->next==NULL)
return head;
ListNode* p=head;
int x=p->val-1;
ListNode* root=new ListNode(x);
root->next=head;
ListNode* pre=root;
while(p&&p->next){
if(p->val!=p->next->val){
pre=p;
}else{
while(p->next&&p->val==p->next->val)
p=p->next;
pre->next=p->next;
}
p=p->next;
}
return root->next;
}
思路二:
ListNode *deleteDuplicates(ListNode *head) {
if(head==NULL||head->next==NULL)
return head;
ListNode* p;
int x=p->val-1;
ListNode* root=new ListNode(x);
root->next=head;
ListNode* pre=root;
while(pre->next&&pre->next->next){ //从头节点遍历,
if(pre->next->val==pre->next->next->val){
p=pre->next->next->next; //删除后面重复的所有节点
while(p&&p->val==pre->next->val)
p=p->next;
pre->next=p; //保证链表不断
}else{
pre=pre->next;
}
}
return root->next;
}