题目描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
ListNode* deleteDuplication(ListNode* pHead)
{
ListNode* cur = pHead;
ListNode* prev = NULL;
ListNode* next = cur -> next;
if(pHead == NULL || pHead -> next == NULL) return pHead;
while(next)//当next为空时循环结束
{
if(cur -> val == next -> val)//当cur与next的值相同时开始进入删除
{
next = next -> next;
while(next)//让next找到不等于cur值的结点
{
if(next -> val != cur -> val)
break;
next = next -> next;
}
while(cur != next)//删除cur到next的元素
{
ListNode* tmp = cur;
cur = cur -> next;
free(tmp);
}
if(prev == NULL)//判断删除的是不是头
{
pHead = cur;
}
else
{
prev -> next = next;
}
if(next)//判断next能否接着向后移动
{
next = next -> next;
}
}
else//如果不需要删除的普通情况
{
prev = cur;
cur = next;
next = next -> next;
}
}
return pHead;
}