LeetCode 之 Remove Duplicates from Sorted List I II — C++ 实现
来源:互联网 发布:撕衣服软件 编辑:程序博客网 时间:2024/06/02 06:37
Remove Duplicates from Sorted List
Given a sorted linked list, delete all duplicates such that each element appear only once.
For example,
Given 1->1->2
, return 1->2
.
Given 1->1->2->3->3
, return 1->2->3
.
例如:
给定链表 1->1->2,返回 1->2
给定链表 1->1->2->3->3,返回1->2->3。
class Solution {public: ListNode* deleteDuplicates(ListNode* head) { if(!head) { return NULL; } ListNode *pre = head, *p = head->next, *cur = NULL; int lastVal = head->val; while(p) { if(p->val == lastVal)//重复,则删除 { cur = p; p = p->next; pre->next = p; delete cur; cur = NULL; } else//不重复 { lastVal = p->val; p = p->next; pre = pre->next; } } return head; }};
Remove Duplicates from Sorted List II
Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.
For example,
Given 1->2->3->3->4->4->5
, return 1->2->5
.
Given 1->1->1->2->3
, return 2->3
.
给定一个有序链表,删除所有重复元素,只留下不重复的元素。
例如:
给定链表 1->2->3->3->4->4->5,返回 1->2->5
给定链表 1->1->1->2->3,返回 2->3。
分析:从表头开始扫描,遇到重复的元素只删除当前的一个,再下次遇到不重复的元素时将这个最开始重复的元素也删掉即可。注意一直重复到表尾的情况。
class Solution {public: ListNode* deleteDuplicates(ListNode* head) { if(NULL == head)// 空 { return NULL; } struct ListNode *cur = NULL, *ne = NULL; int preVal = 0; int isequal = 0; ListNode *tempHead = new ListNode(0), *pre = tempHead;//新建临时头结点,不用判断是否删除为头 tempHead->next = head; ne = head->next; preVal = head->val; while(ne) { if(ne->val == preVal)//和前一个节点值相等 { isequal = 1; cur = ne; ne = ne->next; pre->next->next = ne;//pre始终指向当前节点的前两个节点,因为当先节点可能和后面节点重复 delete cur;//删除重复节点 cur = NULL; } else { if(isequal)//前面出现过相等的节点,第一个相等的节点没有删除 { isequal = 0; //标志清 0 cur = pre->next; pre->next = ne; delete cur; cur = NULL; } else { pre = pre->next; } preVal = ne->val;//从新换成当前节点的新值 ne = ne->next; } } if(isequal)//前面出现过相等的节点,第一个相等的节点没有删除 { cur = pre->next; pre->next = NULL; delete cur; cur = NULL; } head = tempHead->next; delete tempHead; return head; }};
0 0
- LeetCode 之 Remove Duplicates from Sorted List I II — C++ 实现
- LeetCode 之 Remove Duplicates from Sorted Array I II — C 实现
- [leetcode](Remove Duplicates from Sorted List II C语言实现)
- 【LeetCode】Remove Duplicates from Sorted List I && II
- 【LeetCode】Remove Duplicates from Sorted List I && II
- [Leetcode] Remove Duplicates from Sorted List I | II
- LeetCode Solutions : Remove Duplicates from Sorted List I & II
- leetcode--83&82 Remove Duplicates from sorted list I&II
- 082&083 Remove Duplicates from Sorted List I II [Leetcode]
- Remove Duplicates from Sorted List I II -- leetcode
- [Leetcode] #82#83 Remove Duplicates from Sorted List I & II
- LeetCode:Remove Duplicates from Sorted List I & II
- Remove Duplicates from Sorted List I II
- Remove Duplicates from Sorted List I,II
- Remove Duplicates from Sorted List I II
- [C++]LeetCode: 6 Remove Duplicates from Sorted List II
- 【leetcode c++】82 Remove Duplicates from Sorted List II
- [leetcode-82]Remove Duplicates from Sorted List II(C)
- HTML总结
- ios8.0下CLLocationManager定位服务需要授权了
- iOS开发之字体的替换
- magento修改货币符号和货币符号的位置
- 数据标准化
- LeetCode 之 Remove Duplicates from Sorted List I II — C++ 实现
- 显示Mac的隐藏文件 以及快速让cocoasPod更新和安装
- 中断-学习总结
- 使用下标法,通过数组名计算数组元素的地址,指针变量指向数组元素输出数组的值
- Effective C++ 条款10解读: 令operator= 返回一个reference to *this
- 搞定linux上MySQL编程(一):linux上源码安装MySQL
- Hibernate3学习笔记(1)——Hibernate概述
- ubuntu14.04 安装FLASH插件
- c include文件