[LeetCode]83. Remove Duplicates from Sorted List(刪除有序連結串列的重複元素 )
阿新 • • 發佈:2019-02-09
83. 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.
思路:
- 看到題就回想了一下單鏈表的節點刪除
- 刪除head->next,則head->next = head->next->next;
- 想到兩種方法,遞迴和迴圈
程式碼1:遞迴
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
class Solution {
public:
//遞迴
ListNode* deleteDuplicates(ListNode* head) {//9ms
ListNode* temp = head;
return Delete(head, temp);
}
ListNode* Delete(ListNode* head, ListNode* temp) {
if(head == nullptr || head->next == nullptr)
return temp;
if(head->val == head->next->val)
head->next = head->next->next;
else//只有前後兩個節點值不一樣才可以head = head->next; 注意連續三個相同數的情況,我在這裡被坑了好幾次
head = head-> next;
return Delete(head, temp);
}
};
程式碼2:迴圈
//迴圈
ListNode* deleteDuplicates(ListNode* head) {//12ms
if(head == nullptr)
return head;
ListNode* temp = head;
while(temp != nullptr){
if(temp->next == nullptr)
break;
if(temp->val == temp->next->val)
temp->next = temp->next->next;
else
temp = temp->next;
}
return head;
}