解题思路:
(1)我是使用了三个指针ppre,pre,q,分别表示前前指针、前指针、当前指针
(2)使用pre->val==q->val,q=q->next来消除相同的元素,ppre表示相同元素之前的那个指针
(3)每次pre变为NULL时,表明还是没有找到头指针
(4)建议使用和牛客网相同的g++或gcc版本,不然高版本的编译器不报错,但是通不过牛客网!!!
class Solution {
public:
ListNode* deleteDuplication(ListNode* pHead) {
ListNode* ppre=NULL,*pre=NULL,*q = pHead;
ListNode* head = NULL;
while(q) {
if(pre==NULL) {
pre=q;
head = pre;
q=q->next;
} else {
if(pre->val==q->val) {
while(q!=NULL && pre->val==q->val) {
q = q->next;
}
pre = ppre;
if(pre==NULL) {
pre=q;
head = pre;
if(q!=NULL) q=q->next;
} else pre->next = q;
} else {
ppre = pre;
pre = q;
q = q->next;
}
}
}
return head;
}
};