在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
*/
class Solution {
public:
ListNode* deleteDuplication(ListNode* pHead)
{
//判断是否为空
ListNode* pnew=new ListNode(0);
ListNode* ptmp=pnew;//指向新建的节点
ListNode* p=pHead;
ListNode* pdel=NULL;//要删除的节点
while(p)
{
if(p->next!=NULL&&p->val==p->next->val){//遇到重复值的时候的处理
pdel=p;
ListNode* pNext=p->next;//建立一个指针指向当前节点的下一个节点
delete pdel;//删除当前这个节点,然后从这个节点的下一个节点继续往后比较
while(pNext->next!=NULL&&pNext->val==pNext->next->val)
{
//如果连续几个值相同则依次删除
pdel=pNext;
pNext=pNext->next;
delete pdel;
}
pdel=pNext;//最后一个和之前重复值相同的节点
p=pNext->next;//当前节点为重复值的下一个节点
delete pdel;
}
else{
ptmp->next=p;//新建立一个链表相当于
ptmp=ptmp->next;
p=p->next;
}
}
ptmp->next=NULL;
return pnew->next;
}
};