/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
*/
题解:
class Solution {
public:
ListNode* deleteDuplication(ListNode* pHead)
{
ListNode *dummy=new ListNode(-1);//设置一个额外的头结点
ListNode *cur=pHead, *pre=dummy;
dummy->next=pHead;
while(cur&&cur->next)
{
if(cur->val==cur->next->val)//如果有重复节点
{
int val=cur->val;
while(cur&&cur->val==val) cur=cur->next;
pre->next=cur;//上一个节点指向重复节点的下一个节点
}
else
{
pre=cur;
cur=cur->next;
}
}
return dummy->next;
}
};
我的代码:
class Solution {
public:
ListNode* deleteDuplication(ListNode* pHead)
{
if(pHead==NULL) return NULL;
if(NULL==pHead->next) return pHead;
ListNode *ans=pHead, *nxt, *pre=NULL;//pre前一个不重复的节点,nxt与当前节点重复的下一个节点
while(pHead)
{
nxt=pHead;
bool flag=false;
while(nxt->next&&nxt->next->val==pHead->val)//找到重复的最后一个节点
{
nxt=nxt->next;
flag=true;
}
if(flag)//如果有重复节点
{
if(NULL==pre) ans=nxt->next;
else pre->next=nxt->next;
}
else pre=pHead;
pHead=nxt->next;
}
return ans;
}
};
[剑指offer]删除链表中重复的结点
最新推荐文章于 2021-11-20 09:44:46 发布