【剑指offer】——删除链表的重复节点

题目描述

在排序链表中,删除链表的重复节点。

解答:

struct ListNode{
    int val;
    ListNode* next;
};

void DeleteDup(ListNode** pHead)
{
	//如果为空表
    if(pHead==NULL||*pHead==NULL)
        return;
	//删除节点前一节点
    ListNode* Pre=(ListNode*)malloc(sizeof(ListNode));
    Pre=NULL;
	//当前节点
    ListNode* pNode=(ListNode*)malloc(sizeof(ListNode));
    *pNode=*pHead;
	//当前节点不为NULL
    while(pNode!=NULL)
    {
    	//当前节点的后一节点
        ListNode* pNext=pNode->next;
        bool needDelete=false;
		//若重复则needDefine为true
        if(pNext!=NULL&&pNext->val==pNode->val)
            needDelete=true;
		//若不重复则,指针后移
        if(!needDelete)
        {
            Pre=pNode;
            pNode=pNode->Next;
        }
        //若重复则删除
        else
        {
       		 //重复的值
            int value=pNode->val;
            //定义指正指向要删除节点
            ListNode* pToDel=(ListNode*)malloc(sizeof(ListNode));
            pToDel=PNode;
            //当要删除节点不为空值依旧重复时
            //删除节点
            while(pToDel!=NULL&&pToDel->val=value)
            {
                pNext=pToDel->next;
                delete pToDel;

                pToDel=NULL;
                pToDel=pNext;
            }
            //若头结点被删除,重新定义头结点
            if(pPreNode==NULL)
           		*pHead=pNext;
           	//Pre后移
            else
                Pre->next=pNext;
			//当前节点后移
            pNode=pNext;
        }
    }

}

发布了160 篇原创文章 · 获赞 316 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/ShawnWang1994/article/details/99681108