剑指offer-面试题57:删除链表中重复的结点
来源:互联网 发布:直播狗网络电视官网 编辑:程序博客网 时间:2024/05/16 07:50
题目:在一个排序的链表中,如何删除重复的结点?例如1->2->3->3->4->4->5删除重复结点后为1->2->5。
思路:题目看似很简单,但要写出无bug鲁棒性好的代码其实有一定难度。首先重复结点可能出现在头结点,如果要修改头结点的指针,那么传入的参数应该为指针的指针,即指向头结点指针的指针。对于重复结点,处理的过程是先找到后面的第一个不等于当前结点的结点,然后将当前结点的前一个结点指向这个结点,中间部分的结点删除。同时当前结点后移,如果当前结点为头结点,那么要做的就只有更改头结点的指针。
void deleteDuplication(ListNode** pHead){ if(pHead == NULL || *pHead == NULL) return; ListNode* pPreNode = NULL; ListNode* pNode = *pHead; while(pNode != NULL) { ListNode* pNext = pNode->m_pNext; bool needDelete = false; if(pNext != NULL && pNext->m_nValue == pNode->m_nValue) needDelete = true; if(!needDelete) { pPreNode = pNode; pNode = pNode->m_pNext; } else { int value = pNode->m_nValue; ListNode* pToBeDel = pNode; while(pToBeDel != NULL && pToBeDel->m_nValue == value) { pNext = pToBeDel->m_pNext; delete pToBeDel; pToBeDel = NULL; pToBeDel = pNext; } if(pPreNode == NULL) *pHead = pNext; else pPreNode->m_pNext = pNext; pNode = pNext; } }}
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》删除链表中重复的结点
- 启动tomca8w.exe是提示未安装指定服务
- 十、森林与并查集---(1)什么是并查集
- bzoj 2208: [Jsoi2010]连通数
- Android 图片操作,Image实战
- parolBot在VS2010中运行配置问题
- 剑指offer-面试题57:删除链表中重复的结点
- wordpress中的时区问题
- bzoj2527: [Poi2011]Meteors
- 各种排序
- python_正则表达式(一)基础标识符
- HDU-4035 Maze (概率DP&&树形DP)
- latex---中文模板
- Maven学习总结(18)——深入理解Maven仓库
- tomcat7并发和线程数