83. Remove Duplicates from Sorted List
2016-06-03 16:17
369 查看
题目:
Given a sorted linked list, delete all duplicates such that each element appear only once.
For example,
Given
Given
题意:
给定一个排好序的链表,删除所有值重复的节点使每个元素仅出现一次。
转载:leetcode题解
思路一:
使用递归实现,检测前后两个节点值是否相等,相等则删除后一个元素。
代码:16ms
/**
* 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) return head;
ListNode dummy(head->val+1); //值只要跟head不同即可
dummy.next = head;
recur(&dummy, head);
return dummy.next;
}
private:
static void recur(ListNode* prev, ListNode* cur){
if(cur==nullptr) return;
if(prev->val == cur->val){ //删除head
prev->next = cur->next;
delete cur;
recur(prev, prev->next);
}else{
recur(prev->next, cur->next);
}
}
};
思路二:
迭代版。
代码:
/**
* 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==nullptr) return nullptr;
for (ListNode* prev = head, *cur=head->next; cur; cur = cur->next){
if(prev->val==cur->val){
prev->next = cur->next;
delete cur;
}else{
prev = cur;
}
}
return head;
}
};
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.
题意:
给定一个排好序的链表,删除所有值重复的节点使每个元素仅出现一次。
转载:leetcode题解
思路一:
使用递归实现,检测前后两个节点值是否相等,相等则删除后一个元素。
代码:16ms
/**
* 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) return head;
ListNode dummy(head->val+1); //值只要跟head不同即可
dummy.next = head;
recur(&dummy, head);
return dummy.next;
}
private:
static void recur(ListNode* prev, ListNode* cur){
if(cur==nullptr) return;
if(prev->val == cur->val){ //删除head
prev->next = cur->next;
delete cur;
recur(prev, prev->next);
}else{
recur(prev->next, cur->next);
}
}
};
思路二:
迭代版。
代码:
/**
* 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==nullptr) return nullptr;
for (ListNode* prev = head, *cur=head->next; cur; cur = cur->next){
if(prev->val==cur->val){
prev->next = cur->next;
delete cur;
}else{
prev = cur;
}
}
return head;
}
};
相关文章推荐
- 扫描指定目录下所有图片文件
- const 与define
- Erlang 聊天室程序( 一)
- find用法
- bower
- 属性动画-TypeEvaluator
- 自适应行高
- MySQL 教程
- linux命令
- mysql主从复制实战
- PowerPC介绍
- 现代通讯类产品生产制造流程(二)
- Axure函数大全
- AAA Spring集成Quartz定时任务框架介绍和Cron表达式详解
- git 的简单使用
- for jdevelope for ebs 12
- UIDocumentInteractionController浏览文件
- 修改mysql数据库的存储引擎
- Rplication error: Could not find stored procedure 'dbo.sp_MSins_dboTablename'解决方法.
- ios9 获取app 获取wifi列表,wifi添加副标题