力扣-83. 刪除排序連結串列中的重複元素

DawnTraveler發表於2024-05-01

1.題目

題目地址(83. 刪除排序連結串列中的重複元素 - 力扣(LeetCode))

https://leetcode.cn/problems/remove-duplicates-from-sorted-list/

題目描述

給定一個已排序的連結串列的頭 head刪除所有重複的元素,使每個元素只出現一次 。返回 已排序的連結串列

示例 1:

輸入:head = [1,1,2]
輸出:[1,2]

示例 2:

輸入:head = [1,1,2,3,3]
輸出:[1,2,3]

提示:

  • 連結串列中節點數目在範圍 [0, 300]
  • -100 <= Node.val <= 100
  • 題目資料保證連結串列已經按升序 排列

2.題解

2.1 一次遍歷

思路

這裡遍歷連結串列,遇到重複的就刪除重複的後一個節點,且當前節點cur不移動(防止接著的一個節點又等於cur->val)
否則我們向後移動cur,繼續遍歷。

程式碼

  • 語言支援:C++

C++ Code:


 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* deleteDuplicates(ListNode* head) {
        if(head == nullptr) return head;
        ListNode *cur = head, *nt = head->next;
        while(cur->next != nullptr){
            if(cur->val == cur->next->val){
                ListNode *temp = cur->next;
                cur->next = temp->next;
                delete temp;
            }else{
                cur = cur->next;
            }         
        }
        return head;
    } 
};

複雜度分析

令 n 為陣列長度。

  • 時間複雜度:\(O(n)\)
  • 空間複雜度:\(O(n)\)

相關文章