剑指offer|删除链表中重复的结点
来源:互联网 发布:天猫淘宝店费用预算 编辑:程序博客网 时间:2024/05/29 15:05
题目描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
思路:
从前往后遍历,用一个指针pNode指向当前节点,一个指针pPre指向pNode的前一节点,一个指针pNext指向pNode的下一个节点。
如果pNext不为空,且其指向节点的值等于pNode指向节点的值,那么需要删除重复节点。删除完该重复节点之后要判断pPre是否为空指针,如果为空说明从头结点到pNode都被删除了,所以将头结点指向pNext。如果pPre不为空,则将其指向它的下一个节点。
如果不需要删除重复节点,则之间将pPre和pNode都向后移一个节点。
class Solution {public: ListNode* deleteDuplication(ListNode* pHead) { if(pHead == nullptr) return pHead; ListNode* pNode=pHead; ListNode* pPre=nullptr; while(pNode) { ListNode* pNext=pNode->next; if(pNext != nullptr && pNext->val == pNode->val) { ListNode* pToBeDeleted=pNode; int value=pNode->val; while(pToBeDeleted != nullptr && pToBeDeleted->val == value) { pNext=pToBeDeleted->next; delete pToBeDeleted; pToBeDeleted=nullptr; pToBeDeleted=pNext; } if(pPre == nullptr) pHead=pNext; else pPre->next=pNext; pNode=pNext; } else { pPre=pNode; pNode=pNode->next; } } return pHead; }};
0 0
- 剑指offer--删除链表中重复的结点
- 《剑指offer》删除链表中重复的结点
- 剑指offer:删除链表中重复的结点
- [剑指offer]删除链表中重复的结点
- 剑指offer|删除链表中重复的结点
- 《剑指offer》:删除链表中重复的结点
- 剑指Offer:删除链表中重复的结点
- 《剑指offer》-删除链表中重复的结点
- 剑指offer: 删除链表中重复的结点
- 剑指offer 删除链表中重复的结点
- 【剑指offer】删除链表中重复的结点
- 剑指Offer-删除链表中重复的结点
- 剑指offer--删除链表中重复的结点
- 剑指offer-删除链表中重复的结点
- 剑指offer:删除链表中重复的结点
- 剑指offer--删除链表中重复的结点
- 剑指offer 删除链表中重复的结点
- 删除链表中重复的结点(剑指offer)
- Java虚拟机知识整理——垃圾清理
- 再谈 JS中的模块规范(CommonJS,AMD,CMD)来自玉伯的seajs分析
- 用图片的base64字符串 合成tiff
- NFS Volume Provider(Part I) - 每天5分钟玩转 OpenStack(62)
- 2016谷歌学术指标出炉,影响因子面临冲击?
- 剑指offer|删除链表中重复的结点
- 如何写好一篇高质量的IEEE/ACM Transaction级别的计算机科学论文?
- hibernate关联映射
- 常用数据结构和算法操作效率的对比总结
- Java日期时间(Date/Time):DateFormat格式代码
- POJ 1222 EXTENDED LIGHTS OUT(高斯消元)
- hdoj1002A + B Problem II
- ArcSDE
- 关于sysctl.conf配置对网络连接数的优化