剑指offer 删除链表中重复的结点
来源:互联网 发布:直播软件类似yy 编辑:程序博客网 时间:2024/05/16 05:14
题目描述:
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
思路:主要是细节的处理
首先如果头部要删除,那么是很复杂的事,因为是一个升序链表,所以在头部的前面加一个val-1的头结点,那么就可以从头部慢慢处理了。保存已经出现过的结点数目,然后从头开始遍历,保持两个指针,一个遍历指针,一个遍历指针的上一个指针。记得中途删除的时候,可能遍历指针指到空指针。
代码如下:
/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* deleteDuplication(ListNode* pHead) { if(pHead==nullptr||pHead->next==nullptr) return pHead; int val = pHead->val; ListNode *cur; cur=(struct ListNode *)malloc(sizeof(struct ListNode)); cur->val = val-1; cur->next = pHead; map<int,int>mp; mp.clear(); ListNode *p,*last; p = cur; while(p) { int val = p->val; ++mp[val]; p = p->next; } p = cur->next; last = cur; while(p!=nullptr) { int val = p->val; if(mp[val]>1) { int cnt = mp[val]; while(cnt) { //ListNode* mm; // mm = p ; p = p->next; // delete(mm); cnt--; } last->next = p; } if(p==nullptr) break; val = p->val; if(mp[val]>1) continue; else { last = p; p = p->next; } } return cur->next; }};
阅读全文
0 0
- 剑指offer--删除链表中重复的结点
- 《剑指offer》删除链表中重复的结点
- 剑指offer:删除链表中重复的结点
- [剑指offer]删除链表中重复的结点
- 剑指offer|删除链表中重复的结点
- 《剑指offer》:删除链表中重复的结点
- 剑指Offer:删除链表中重复的结点
- 《剑指offer》-删除链表中重复的结点
- 剑指offer: 删除链表中重复的结点
- 剑指offer 删除链表中重复的结点
- 【剑指offer】删除链表中重复的结点
- 剑指Offer-删除链表中重复的结点
- 剑指offer--删除链表中重复的结点
- 剑指offer-删除链表中重复的结点
- 剑指offer:删除链表中重复的结点
- 剑指offer--删除链表中重复的结点
- 剑指offer 删除链表中重复的结点
- 删除链表中重复的结点(剑指offer)
- 哪家手机车牌识别软件好
- 旧美后感
- 周计划 补完工程 第十四周 R 语言ggplot2(1)
- 操作系统知识点
- 一些重要的算法
- 剑指offer 删除链表中重复的结点
- 机器学习实战-python3决策树实例
- 最近的感想
- LayUI的表格在项目中的应用
- apply 和 call
- 八大排序算法 Java 实现
- PAT (Basic Level) Practise (中文) 1079. 延迟的回文数 (20)
- 如何将无法显示的NTFS硬盘显示到桌面上
- 23 hashtable&unordered_set&unordered_map深度探索(学自Boolean)