当前位置 博文首页 > L_add的博客:删除链表中重复节点

    L_add的博客:删除链表中重复节点

    作者:[db:作者] 时间:2021-08-27 12:55

    删除链表中的重复结点

    题目描述:
    在一个排序的链表中,存在重复的结点,请删除该链表中重复结点,重复的结点不保留,返回链表头指针。(没有头节点) 例如,链表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
    下一篇:没有了