082 Remove Duplicates from Sorted List II [Leetcode]
2015-08-09 21:48
260 查看
题目内容:
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.
从头遍历整个链表,如果当前节点值与下一个节点值相同,说明该节点应该被删掉。还需要有一个前向节点来与下一个合适的节点相连。确保当前节点永远没有与下一个没有重复的节点连接在一起。
需要注意的是头结点可能也会被删除,因此不要忽略头结点的更新。
代码:
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.
从头遍历整个链表,如果当前节点值与下一个节点值相同,说明该节点应该被删掉。还需要有一个前向节点来与下一个合适的节点相连。确保当前节点永远没有与下一个没有重复的节点连接在一起。
需要注意的是头结点可能也会被删除,因此不要忽略头结点的更新。
代码:
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* deleteDuplicates(ListNode* head) { if(head == NULL || head->next == NULL) return head; ListNode *pre(NULL), *p(head); while(p != NULL) { ListNode *pnext = p->next; bool del(false); if(pnext != NULL && pnext->val == p->val) del = true; if(!del) { pre = p; p = p->next; } else { int value(p->val); ListNode *d = p; while(d != NULL && d->val == value) { pnext = d->next; delete d; d = pnext; } if(pre == NULL) { head = pnext; } else { pre->next = pnext; } p = pnext; } } return head; } };
相关文章推荐
- win7 efi安装(个人心得)
- uva 11361 Investigating Div-Sum Property 数位dp
- leetcode 217 Contains Duplicate 数组中是否有重复的数字
- windowsphone8.1学习笔记之应用数据(三)
- I学霸官方免费教程五:Java基础之运算符
- 前端技能
- uva 10382
- mac下的git的安装与简单的配置
- Codeforces 567F
- 计蒜客 难题题库 014 罗马数字转换成整数
- [POJ 3169] Layout 差分约束
- 黑马程序员-----java基础之运算符----与(&)、或(|)、非(!)、异或(^)、短路与(&&)等
- HDOJ1071
- 借贷宝注册提现详细攻略:注册送20元,邀请好友再各送20元,亲测可无条件提现(附提现、到账截图)
- UISearchBar去除背景颜色
- #每日Linux小练习#06 Shell Script知识点总结(上)
- EL表达式简单应用
- Singleton---单例模式(创建型)
- 信息发布
- Codeforces 5C