版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ShellDawn/article/details/88933470
两指针循环(感觉还是三指针好写一些):
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
*/
class Solution {
public:
ListNode* deleteDuplication(ListNode* pHead)
{
if(pHead == NULL) return NULL;
ListNode* root = NULL;
ListNode* fa = pHead;
ListNode* cld = fa->next;
ListNode* last = NULL;
while(cld!=NULL){
bool flag = false;
while(cld!=NULL && fa->val == cld->val){
flag = true;
delete fa;
fa = cld;
cld = cld->next;
}
if(flag){
delete fa;
if(last != NULL) last->next = cld;
fa = cld;
if(cld!=NULL) cld = cld->next;
continue;
}
if(root == NULL) root = fa;
if(cld == NULL) break;
last = fa;
fa = cld;
cld = cld->next;
}
if(root==NULL&&fa!=NULL) root = fa;
return root;
}
};