LeetCode :: Remove Duplicates from Sorted List[详细分析]
2014-03-24 23:31
260 查看
Given a sorted linked list, delete all duplicates such that each element appear only once.
For example,
Given
Given
这道题目,可以和之前的LeetCode :: Remove Duplicates from Sorted Array [详细分析]进行比较,可以发链表这个动态数据结构在动态性能上面是优于数组的。单看删除这一步,只需要花费O(1)的时间,之前的Array使用的删除方法不是真正的删除,因为Array的有效位后面还有残留一些无用数据,而链表这里是可以完完全全删除的。(当成链表的查找时间是O(N)而数组是O(1))。
注意:链表问题经常会在指针转换指向对象的时候,因为顺序之类的问题导致无限绕圈循环的Runtime Error,每次都应该注意。
错误的地方有两个: 1.
For example,
Given
1->1->2, return
1->2.
Given
1->1->2->3->3, return
1->2->3.
这道题目,可以和之前的LeetCode :: Remove Duplicates from Sorted Array [详细分析]进行比较,可以发链表这个动态数据结构在动态性能上面是优于数组的。单看删除这一步,只需要花费O(1)的时间,之前的Array使用的删除方法不是真正的删除,因为Array的有效位后面还有残留一些无用数据,而链表这里是可以完完全全删除的。(当成链表的查找时间是O(N)而数组是O(1))。
注意:链表问题经常会在指针转换指向对象的时候,因为顺序之类的问题导致无限绕圈循环的Runtime Error,每次都应该注意。
/** * 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) return NULL; ListNode *p = head; while (p != NULL && p -> next != NULL){ ListNode *q = p -> next; if (q -> val == p -> val){ p -> next = q -> next; delete q; //记得释放掉无用内存空间。不释放可以AC,但是不是好的编程风格。 } else //只有当不重复时候往后走一位,不然一直原地“吞并”。 p = p -> next; } return head; } };第一次写的时候RUNTIME ERROR ,错在case {1 ,1}上。附上错误代码分析一下:
错误的地方有两个: 1.
/** * 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) return NULL; ListNode *p = head; while (p -> next != NULL){ ListNode *q = p -> next; if (q -> val == p -> val){ p -> next = q -> next; delete q; } p = p -> next; } return head; } };
相关文章推荐
- LeetCode::Remove Duplicates from Sorted List II [详细分析]
- LeetCode :: Remove Duplicates from Sorted Array II 详细分析
- LeetCode---Remove Duplicates from Sorted List、Remove Duplicates from Sorted List II解题分析
- LeetCode :: Remove Duplicates from Sorted Array [详细分析]
- LeetCode::Remove Duplicates from Sorted List II [具体分析]
- Remove Duplicates from Sorted List II--LeetCode
- LeetCode: Remove Duplicates from Sorted List
- leetcode 【 Remove Duplicates from Sorted List 】 python 实现
- LeetCode题解:Remove Duplicates from Sorted List II
- LeetCode Remove Duplicates from Sorted List
- [LeetCode] Remove Duplicates from Sorted List
- LeetCode 083 Remove Duplicates from Sorted List
- [LeetCode] Remove Duplicates from Sorted List 解题报告
- leetcode-Remove Duplicates from Sorted List II
- leetcode Remove Duplicates from Sorted List II
- 【leetcode】【82】Remove Duplicates from Sorted List II
- Leetcode 82 Remove Duplicates from Sorted List II
- LeetCode: Remove Duplicates from Sorted List II
- LeetCode 83 Remove Duplicates from Sorted List(从已排序链表中移除重复元素)(*)
- 【LeetCode】Remove Duplicates from Sorted List