给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。
基本思路是第一层循环,两个指针分别指向当前元素和它的前继,目的是如果有重复,需要删除当前元素,然后直到当前元素为空
第二层循环,两个指针分别指向当前元素的下一个元素和它的前继,目的是如果有重复,需要删除当前元素之后的所有元素,然后直到当前比较元素为空
ListNode* Solution::deleteDuplicates(ListNode* head)
{
ListNode *pnewhead = new ListNode(0);
ListNode *pcurrentlast = pnewhead;
ListNode *pcurrent = head;
unsigned int DuplicateFlag = 0;
if((head == NULL)||(head->next == NULL))
{
return head;
}
pcurrentlast->next = head;
while(pcurrent != NULL)
{
ListNode *pnext = pcurrent->next;
ListNode *pnextlast = pcurrent;
while(pnext != NULL)
{
if(pnext->val == pcurrent->val)
{
DuplicateFlag = 1;
pnextlast->next = pnext->next;
pnext = pnext->next;
}
else
{
pnext = pnext->next;
pnextlast = pnextlast->next;
}
}
/*no data duplicate*/
if(0 == DuplicateFlag)
{
pcurrent = pcurrent->next;
pcurrentlast = pcurrentlast->next;
}
else
{
/*data duplicate,delete current node*/
pcurrentlast->next = pcurrent->next;
pcurrent = pcurrent->next;
DuplicateFlag = 0;
}
}
return pnewhead->next;
}