《剑指Offer》学习笔记--面试题57:删除链表中重复的结点
来源:互联网 发布:linux cpu核心数 编辑:程序博客网 时间:2024/05/24 04:30
题目:在一个排序的链表中,如何删除重复的结点?
解决这个问题的第一步是确定删除的参数。当然这个函数需要输入待删除链表的头结点。头结点可能与后面的结点重复,也就是说头结点也可能被删除,因此函数函数应该声明为void deleteDuplication(ListNode** pHead),而不是void deleteDuplication(ListNdoe* pHead)。
接下来我们从头遍历整个链表。如果当前结点的值与下一个结点的值相同,那么它们就是重复的结点,都可以被删除。为了保证删除之后的链表仍然是相连的而没有中间断开,我们要把当前及诶单的前一个结点和后面值比当前结点的值要打的结点相连。我们要确保pPreNode要始终与下一个没有重复的结点连接在一起。
上述删除重复结点的过程可以用如下代码实现:
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;elsepPreNode->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》删除链表中重复的结点
- 李开复:不要用过去的观点想未来
- armel和armhf区别选择
- 第十一周阅读一
- Hue+MapReduce Job配置及遇到的问题
- Invalidate
- 《剑指Offer》学习笔记--面试题57:删除链表中重复的结点
- coocs2dx-lua在XCode开发时lua和资源热更新问题解决办法
- VC常用数据类型使用转换
- Win32线程
- 遍历 Valid Palindrome
- spring+mybatis的优缺点
- VC中句柄、指针、ID之间的转换
- Crossing Rivers
- c++_操作符重载