1. 程式人生 > >LeetCode 82 ——刪除排序連結串列中的重複元素 II

LeetCode 82 ——刪除排序連結串列中的重複元素 II

1. 題目

2. 解答

新建一個連結串列,並新增一個哨兵結點,從前向後開始遍歷連結串列。

  • 如果下一個結點的值和當前結點的值相等,則迴圈向後遍歷直到找到一個和當前結點值不相等的結點;

  • 反之,如果下一個結點的值和當前結點的值不相等,此值即為原始連結串列中沒有重複出現的數字,將其加入到新連結串列中。

然後繼續向後遍歷。最後,

  • 如果 head 指向最後一個結點,則此最後一個結點的值也沒有重複出現,將其加入到新連結串列中,此時新連結串列的尾結點無需處理;

  • 如果 head 指向 NULL,我們則需要確認新連結串列的尾結點指向 NULL。

/**
 * 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 || head->next == NULL) return
head; ListNode *new_head = new ListNode(0); // 新建哨兵結點方便操作 ListNode *temp = new_head; while (head && head->next) { if (head->val == head->next->val) { while(head != NULL && head->
next != NULL && head->val == head->next->val) { head = head->next; } head = head->next; } else { temp->next = head; temp = head; head = head->next; } } if (head) temp->next = head; // 原連結串列最後一個元素不是重複元素,新增到新連結串列尾 else temp->next = NULL; // 原連結串列最後一個元素是重複元素,新連結串列尾指向 NULL return new_head->next; } };

獲取更多精彩,請關注「seniusen」!