删除链表中重复的结点

来源:互联网 发布:有做淘宝代销成功的吗 编辑:程序博客网 时间:2024/05/06 21:24
</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>

0 0
原创粉丝点击