2.刪除排序連結串列中的重複元素
阿新 • • 發佈:2021-12-14
題目描述
存在一個按升序排列的連結串列,給你這個連結串列的頭節點head,請你刪除所有重複的元素,使每個元素只出現一次。
返回同樣按升序排列的結果連結串列。
樣例
輸入:1->1->2
輸出:1->2
輸入:1->1->2->3->3
輸出:1->2->3
演算法
線性掃描O(n)
自己的想法
連結串列中是升序排序的,所以使用兩個指標進行掃描是合適的
/** * 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 || !head->next) { return head; } ListNode* f = head; ListNode* s = f->next; while (s->next) { if (f->val == s->val) { f->next = s->next; s = s->next; } else if (f->val < s->val) { f = s; s = s->next; } } // 特別的判斷,判斷最後兩個數,如果兩個數相等,那麼就去掉其中的一個數;如果兩個數不等,就不動 if (!s->next && s->val == f->val) { f->next = s->next; } return head; } };