1. 程式人生 > >[LeetCode]83. Remove Duplicates from Sorted List(刪除有序連結串列的重複元素 )

[LeetCode]83. Remove Duplicates from Sorted List(刪除有序連結串列的重複元素 )

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;
    }