class Solution {
public:
ListNode* deleteDuplication(ListNode* pHead)
{
if(!pHead||!pHead->next) return pHead;
else{
//新建头结点,防止头结点被删除时出错
ListNode* newHead=new ListNode(-1);
newHead->next=pHead;
//pre指向可以保留的结点
ListNode* pre=newHead;
ListNode* p=pHead;
ListNode* pnext;//pnext为p->next;
while(p&&p->next){//若指针p和它的next存在不断循环
pnext=p->next;
if(p->val==pnext->val){//如果当前结点的值与下一个节点相等
while(pnext&&p->val==pnext->val) pnext=pnext->next;//pnext指针不断后移
pre->next=pnext;//pre指针指向pnext,相当于删除重复结点
p=pnext;//确定新的开始遍历的结点
}
else{//如果当前结点与下一个节点不相等
pre=p;//将P指针保留
p=p->next;//新的开始遍历的点为p的下一个结点
}
}
return newHead->next;//返回头结点的下一个结点
}
}
};