1

分享

83. Remove Duplicates from Sorted List(C++)

83. Remove Duplicates from Sorted List、LeetCode、鏈結串列(Linked List)
筆記

鏈結串列(Linked List)

Linked List形式
  

節點1 -> 節點2 -> 節點3  -> NULL(最後節點為NULL)

筆記 leetcode c語言

Linked List形式

串列定義
  • 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) {}

};

建立第一個節點
  

ListNode* 鏈結串列名稱 = new ListNode(值);

指向下一個節點(struct ListNode中定義的next)
  • struct ListNode裡面定義ListNode *next;
  

鏈結串列名稱 -> next

取值(struct ListNode中定義的val)
  • struct ListNode裡面定義 int val
  

鏈結串列名稱 -> val

刪除節點(第一個節點)
  

ListNode *temp = 鏈結串列名稱;             //先把該串列第一個值存起來

鏈結串列名稱 = 鏈結串列名稱 -> next;   //把串列指向下一個節點

delete temp;                                                //把temp刪掉

創造鏈結串列(Linked List)
  • 每次都創造新的節點,然後在把串列指向新的節點
  • 預計產出:[1,1,2,3,3]
  • 1 -> 1 -> 2 -> 3 -> 3 -> NULL
  

#include <iostream>

#include <vector>

using namespace std;

// 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) {}

};

int main(){

    vector<int> num={1,1,2,3,3};

    ListNode *head = new ListNode();

    ListNode *current = head;

    for(int i=0; i<num.size(); i++){

        ListNode *head_back = new ListNode(num[i]);

        current->next = head_back;

        current = current->next;

    }

    head = head->next;

    while(head!=nullptr){

        cout<<head->val<<" ";

        head = head->next;

    }

}

筆記 leetcode c語言

創造鏈結串列(Linked List)

Output
  

1 1 2 3 3

83. Remove Duplicates from Sorted List

題目:給定一個排序鏈結串列的頭部,刪除所有重複項,使每個元素只出現一次。 返回已排序的鏈結串列。
回傳:值不重複的鏈結串列
例如1:
Input:1 > 1 > 1
  

Output: 1

例如2:
Input:1 > 1 > 2 > 3 >3
  

Output: 1 > 2 >3

Code

  

#include <iostream>

#include <vector>

using namespace std;

// 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) {}

};


ListNode* deleteDuplicates(ListNode* head) {

    ListNode *current = head;    

    while(current && current->next){

        if(current->val == current->next->val){

            current->next = current->next->next;     

        }

        else{

            current = current->next;    

        }

    }

    return head;

}


int main(){

    vector<int> num={1,1,2,3,3};

    ListNode *head = new ListNode();

    ListNode *current = head;

    for(int i=0; i<num.size(); i++){

        ListNode *head_back = new ListNode(num[i]);

        current->next = head_back;

        current = current->next;

    }

    head = head->next;

    head = deleteDuplicates(head);

    while(head!=nullptr){

        cout<<head->val<<" ";

        head = head->next;

    }

}

筆記 leetcode c語言

83. Remove Duplicates from Sorted List(1/2)

筆記 leetcode c語言

83. Remove Duplicates from Sorted List(2/2)

Output

  

1 2 3

參考資料

[1]. Remove Duplicates from Sorted List - LeetCode
[2]. [LeetCode] 83. Remove Duplicates from Sorted List 移除有序链表中的重复项 - Grandyang - 博客园 (cnblogs.com)
#筆記  #leetcode  #c語言 
分類:學習

【關鍵字】:新手教學、Leetcode ; 【分類】:學習、理財。(目前C++新手教學第二章內容已完結)。建議或意見可私訊:https://reurl.cc/ze7L9k。文章有錯誤的地方還請留言指正,謝謝各位

評論
上一篇
  • 70. Climbing Stairs(C++)
  • 下一篇
  • 本益比(PER)&每股盈餘(EPS)
  • 更多文章
    載入中... 沒有更多了