删除链表中重复放入结点
来源:互联网 发布:如果南京是首都知乎 编辑:程序博客网 时间:2024/06/07 12:13
删除链表中重复放入结点
题目描述:在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
[ 在线OJ ]
- last指向去重后的最后一个元素
- first还未去重部分的第一个元素
- fina指向first的下一个,指向重复元素结尾的下一个元素
- 从链表头开始,寻找第一个非重复元素,即fina的位置,如果发现第一个元素重复,直接删除fina前的所有元素,pHead指向fina,如图Step1和2
- 如果发现中间的重复结点last->next = fina,删除中间重复的结点,如图Step3
例如:
第一步和第二步的指针情况
注意:删除重复结点,避免内存泄露
/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* deleteDuplication(ListNode* pHead) { if(pHead==NULL||pHead->next==NULL) return pHead; ListNode* last = pHead; ListNode* first = pHead; ListNode* fina = pHead; ListNode* tmp = pHead; while(last!=NULL&&last->next!=NULL){ first = last->next; fina = first->next; //找到重复结点,直到fina与该元素不相同 while(fina!=NULL&&first->val==fina->val){ tmp = fina; fina = fina->next; delete tmp; } //第一个结点重复 1 1 .. if(last->val==first->val){ tmp = pHead; pHead=fina; last = fina; delete tmp; }else{ //有重复结点,需要删除结点 if(first->next!=fina){ last->next = fina; delete first; } //没有重复结点 else last = last->next; } } return pHead; }};
阅读全文
0 0
- 删除链表中重复放入结点
- 删除链表中重复的结点
- 删除链表中重复的结点
- 删除链表中重复的结点
- 删除链表中重复的结点
- 删除链表中重复的结点
- 删除链表中重复的结点
- 删除链表中重复的结点
- 删除链表中重复的结点
- 删除链表中重复的结点
- 删除链表中重复的结点
- 删除链表中重复的结点
- 删除链表中重复的结点
- 删除链表中重复的结点
- 删除链表中重复的结点
- 删除链表中重复的结点
- 删除链表中重复的结点
- 删除链表中重复的结点
- 从U盘引导并安装Ubuntu server 16.04.3 的方法
- BZOJ1179【APOI2009】ATM <Tarjan>
- 安装kinetic版的moveit失败或找不到相关包问题
- LeetCode: 22. Generate Parentheses
- Udacity作业——TensorFlow notMNIST代码及输出结果——Udacity学习笔记
- 删除链表中重复放入结点
- HotFix移动热修复详解
- C语言运算符
- 注解
- Electron打包总结, 附例子(windows+linux)
- ACM贪心算法之活动安排以及算法证明
- Windows下安装和配置MongoDB
- Java基础之集合框架--Collections.synchronizedList() 线程安全的List
- 前端之css-flex