【剑指Offer】面试题57:删除链表中重复的结点
来源:互联网 发布:网络ip冲突怎么办 编辑:程序博客网 时间:2024/05/16 14:33
一:题目描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
二:解题思路
从头到尾遍历链表,如果当前结点的值和下一个节点的值相同,那么他们就是重复的结点,都可以被删除。
为保证删除之后的链表仍然是相连没有断开,我们把当前节点的前一个结点和后面值比当前节点的值大的结点相连。
三:代码实现
/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* deleteDuplication(ListNode* pHead) { //边界条件:空或者只包括一个结点,直接返回if(pHead==NULL || (pHead!=NULL && pHead->next==NULL)) return pHead; ListNode* pPreNode=NULL; //发生重复结点的前一个结点 ListNode* pNode=pHead; while(pNode!=NULL){ ListNode* pNext=pNode->next; bool needDelete=false; //是否发生重复 if(pNext!=NULL && pNext->val==pNode->val) needDelete=true; //未发生重复,遍历下一个节点,记录pPreNode if(!needDelete){ pPreNode=pNode; pNode=pNode->next; } else{ //发生重复 int value=pNode->val;//记录重复值 ListNode* pToBeDel=pNode; //记录要删除的结点 //删除重复的结点 while(pToBeDel!=NULL && pToBeDel->val==value){ pNext=pToBeDel->next; delete pToBeDel; pToBeDel=NULL; pToBeDel=pNext; } //头结点是重复的结点 if(pPreNode==NULL) pHead=pNext; else pPreNode->next=pNext; pNode=pNext; } } return pHead; }};
阅读全文
0 0
- 剑指offer-面试题57:删除链表中重复的结点
- 剑指offer--面试题57:删除链表中重复的结点
- 剑指offer 面试题57 删除链表中重复的结点
- 剑指offer-面试题57-删除链表中重复的结点
- 剑指offer 面试题57 删除链表中重复的结点
- 【剑指Offer】面试题57:删除链表中重复的结点
- 剑指offer面试题57 删除链表中重复的结点
- 剑指offer面试题[57]-删除链表中重复的结点
- 【剑指Offer】面试题57:删除链表中重复的结点
- 《剑指Offer》学习笔记--面试题57:删除链表中重复的结点
- 【剑指Offer学习】【面试题57:删除链表中重复的结点】
- 剑指Offer系列-面试题57:删除链表中重复的结点
- 《剑指offer》面试题57 删除链表中重复的结点 C++ 实现 以及 错误总结 (指针问题)!!
- 《剑指Offer》面试题57:删除链表中重复的节点
- 面试题57:删除链表中重复的结点
- 面试题57:删除链表中重复的结点
- 剑指offer--删除链表中重复的结点
- 《剑指offer》删除链表中重复的结点
- 离线安装Cloudera Manager 5和CDH5(最新版5.1.3) 完全教程
- HDU 5802 Windows 10【贪心】
- 直接通过签名文件获取SHA1值
- 未清采购订单关闭最全的方法
- C++ 虚函数表解析
- 【剑指Offer】面试题57:删除链表中重复的结点
- 欧式距离 caffe tensorflow
- 【动态规划】[UVA1025]A Spy in the Metro 城市里的间谍
- iOS基石——UIView
- STL学习笔记-vector
- 【codevs 3185】队列练习1
- cordova-plugin-crosswalk-webview 安装出现错误
- 调试QWebView中javascript代码的方法
- Scala-数组的使用