纪念第一次Leetcode刷代码,时间速度最快。
问题描述
Given a sorted linked list, delete all duplicates such that each element appear only once.
Example 1:
Input: 1->1->2
Output: 1->2
Example 2:
Input: 1->1->2->3->3
Output: 1->2->3
解题思路
弄一个前去指针,和现任指针,比较值使用现任和现任的下一任,使用前驱指针来一直记录已存储完的前一部分表的尾巴位置。
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
if(head ==NULL || head->next == NULL) return head;
if(head->val == head->next->val && head->next->next ==NULL){
head->next = NULL;
return head;
}
ListNode* L = new ListNode(0), *pre = L;
L->next = head;
while(pre->next){
ListNode* cur = pre->next;
while(cur->next && cur->val == cur->next->val) cur = cur->next;
if(cur != pre->next) pre->next = cur;
else pre = pre->next;
}
return L->next;
}
};
Runtime: 12 ms, faster than 100.00% of C++ online submissions for Remove Duplicates from Sorted List.