当前位置 博文首页 > L_add的博客:删除链表中重复节点
题目描述:
在一个排序的链表中,存在重复的结点,请删除该链表中重复结点,重复的结点不保留,返回链表头指针。(没有头节点) 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
(题目转载自牛客网)
思路:用三个指针 prev,cur,next。prev先为空。cur 指向第一个节点,next指向phead的下一个节点,若next->val==cur->val就继续往下找,直到val不相等然后删除cur与next之间节点,prev->next=cur,cur = next,next = next->next
LinkList* DeletDuplication(LinkList* phead)
{
if(phead == NULL || phead->next == NULL)
return phead;
//起始条件
struct LinkList* prev = NULL,*cur = phead,*next = phead->next;
while(next)
{
if(cur->val == next->val)
{//删除重复的
while(next && cur->val == next->val )//next往后走,找到跟next不相等的位置
next = next->next;
while(cur != next)
{//删除cur到next之间的节点
struct LinkList* del = cur;
cur = cur->next;
free(del);
}
if(prev == NULL)
prev = cur;
else
prev->next = cur;
if(next)
next = next->next;
}
else
{
prev = cur;
cur = next;
next = next->next;
}
}
return phead;
}
cs