题目描述
在排序链表中,删除链表的重复节点。
解答:
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;
}
}
}