82.remove duplicates from sorted list Ⅱ#4
Hidden character warning
Conversation
| ListNode* deleteDuplicates(ListNode* head) { | ||
| if (head == nullptr || head->next == nullptr) { | ||
| return head; | ||
| } |
There was a problem hiding this comment.
そうですね、その後でもう一度同じ条件にかけていますね。
ポインタが多くなると把握しきれなくなってるので注意します。
| class Solution { | ||
| public: | ||
| ListNode* deleteDuplicates(ListNode* head) { | ||
| if (head==nullptr) { |
There was a problem hiding this comment.
演算子周辺の空白の取り方について何かしらのコーディング規約に則っておいた方がいいと思いました。
https://ttsuki.github.io/styleguide/cppguide.ja.html
これの水平方向の空白セクションなど参考になると思います。
| } | ||
| unordered_set<int> seen; | ||
| ListNode *fore=head; | ||
| ListNode *back=head; |
There was a problem hiding this comment.
出現したvalをsetに入れて解く方法で解けると思いますが、それだと今回与えられたSorted Listという条件を活かせないと思います。ソートされてないリストが与えられてそこからduplicateがないリストにしてくださいとなるとsetで出現した値を入れて空間計算量O(n)になりますが、sorted listだとポインタの比較でO(1)にすることができます。
There was a problem hiding this comment.
コメントありがとうございます。
なるほど、ソートされているという条件はポインタの連続的な処理に有利に働きますね。
計算量を考えるだけでなくどういう条件が影響しているのか考えるようにします。
| return dummy.next; | ||
| } | ||
| }; | ||
| ``` |
There was a problem hiding this comment.
is_deleting と deleting を使って、「現在削除中の値」を状態として管理している点が分かりやすい実装だと思いました。
重複検出と削除処理を明確に分離しているので、処理の流れを追いやすかったです。
また、continue を使ってネストを浅く保っている点も読みやすいと感じました。
There was a problem hiding this comment.
レビューありがとうございます。
このコードいいですよね。他の方のコードを真似たのですが、参考になります。
This problem: https://leetcode.com/problems/remove-duplicates-from-sorted-list-ii/
Next problem: https://leetcode.com/problems/add-two-numbers/description/