</pre><pre name="code" class="cpp">//删除链表中重复的结点
#include <iostream>
using namespace std;
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
ListNode* deleteDuplication(ListNode* pHead)
{
if(pHead==NULL||pHead->next==NULL)
return pHead;
ListNode* p;
ListNode* q;
ListNode* pre=NULL;
bool toDelete=false;
q=p=pHead;
while(p!=NULL&&q!=NULL)
{
q=p->next;
if(q==NULL)
toDelete=false;
while (q!=NULL&&p->val==q->val)
{
q=q->next;
toDelete=true;
}
if(!toDelete) //无重复
{
if(pre==NULL)
{
pre=p;
pHead=pre;
}else
{
pre->next=p;
pre=p;
}
p=q;
}
else
{
p=q;
}
if(pre==NULL&&p==NULL&&toDelete)
return NULL;
toDelete=false;
}
pre->next=NULL;
return pHead;
}
void main()
{
ListNode no1(1),no2(1),no3(3),no4(3),no5(3),no6(4),no7(4),no8(4);
no1.next=&no2;
no2.next=&no3;
no3.next=&no4;
no4.next=&no5;
no5.next=&no6;
no6.next=&no7;
no7.next=&no8;
ListNode* h=deleteDuplication(&no1);
while(h!=NULL)
{
cout<<h->val<<" ";
h=h->next;
}
system("pause");
}
题目描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
<span style="font-size:18px;background-color: rgb(153, 255, 153);">感想:这题写了好久,来来回回将近一天吧。快被自己乱糟糟的逻辑给整哭了,忍住没抄剑指的答案,最后还好牛客里所有测试用例都过了。</span>