删除链表中重复的结点
2016-03-27 16:32
302 查看
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
思路
因为相同的结点全部都要删除,我们要设置三个指针,一个指向当前结点,一个指向前一结点,一个指向下一结点,一旦遇到当前结点等于下一结点的情况,那么就一直移动,直到遇到下一个结点不同的状况,再将前一个结点指向此时结点的位置。
思路
因为相同的结点全部都要删除,我们要设置三个指针,一个指向当前结点,一个指向前一结点,一个指向下一结点,一旦遇到当前结点等于下一结点的情况,那么就一直移动,直到遇到下一个结点不同的状况,再将前一个结点指向此时结点的位置。
ListNode* deleteDuplication(ListNode* pHead) { if(pHead==nullptr) return pHead; ListNode *pPreNode = nullptr; ListNode *pNode = pHead; while(pNode!=nullptr) { ListNode *pNextNode = pNode->next; bool needDelete = false; if(pNextNode!=nullptr && pNode->val==pNextNode->val) needDelete = true; if(!needDelete) { pPreNode = pNode; pNode = pNode->next; } else { int value = pNode->val; ListNode *pToBeDel = pNode; while(pToBeDel!=nullptr && pToBeDel->val == value) { pNextNode = pToBeDel->next; delete pToBeDel; pToBeDel = nullptr; pToBeDel = pNextNode; } if(pPreNode==nullptr) pHead = pNextNode; else pPreNode->next = pNextNode; pNode = pNextNode; } } return pHead; }
相关文章推荐
- Android学习笔记(34):Android菜单
- 第五周项目1(5)
- 讲义 Reflection
- Problem F
- iOS之“微信支付”开发流程
- 第五周项目一 三角形类雏形(5)
- eclipse添加JSF XHTML模板
- 正则表达式
- [Unity官方文档翻译]Getting Started开始unity项目
- bash有空格的文件名
- SharedPreferences的使用
- Servlet笔记--利用反射实现多个请求使用同一个Servlet
- 使用cocoaPods import导入时没有提示的解决办法
- Problem L
- [BZOJ1180][CROATIAN2009]OTOCI(LCT)
- 千万级用户App小咖秀:服务端架构设计分享
- WPF中Border控件的属性介绍
- hdu4325 Flowers【树状数组区间更新单点求值 离散化】
- win10 下使用VS2012 出现中文????的解决方案(仅限安装了visual assist插件)
- 最大子数组二