Remove Duplicates from Sorted List 去除連結串列中重複值節點

範長法@三月軟體發表於2014-10-28

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.

如題目所訴,去除遞增連結串列中重複值的節點。

剛開始思路如下:

  1. 設定一個指標用於遍歷全部節點
  2. 讓每個節點和其next節點值比較,若相同則將當前節點的next指向其next的next
  3. 繼續遍歷……

但是會有個問題,如果是{1,1,1},那麼遍歷到第一個1的時候,判斷和第二個1相同,則將第一個1的next指向第三個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) {
        ListNode *node = head;
        
        while(NULL != node && NULL != node->next) {
            if(node->next->val == node->val) {
                node->next = node->next->next;
            } else {
                node = node->next;
            }
        }
        
        return head;
    }
};

  

相關文章