Skip to content

82_remove_duplicates_2#4

Open
dxxsxsxkx wants to merge 3 commits into83_remove_duplicatesfrom
82_remove_duplicates_2
Open

82_remove_duplicates_2#4
dxxsxsxkx wants to merge 3 commits into83_remove_duplicatesfrom
82_remove_duplicates_2

Conversation

@dxxsxsxkx
Copy link
Owner


### メモ

- `ListNode* prev = &dummy` によって `prev` に加えられた変更が `dummy` にも加えられ続ける(アドレス参照)?
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

アドレス参照という言葉は C++ にはないと思います。

prev には dummy へのポインターが格納されます。 prev が dummy の実体 (インスタンス) を指し示している状態です。この状態で prev が指し示しているものを変更すると、 prev が指し示している dummy の実体が変更される、という状況です。

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ありがとうございます。言葉の意味をよく分からずに書いていました。
2段落目の説明を読んでより理解が深まりました。

while (runner != nullptr && runner->next != nullptr){
if (runner->val == runner->next->val) {
// flag
int val_dup = runner->val;
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

以下のコメントをご参照ください。
hemispherium/LeetCode_Arai60#10 (comment)
duplicated_val はいかがでしょうか? val はすでに変数名で使用されているため、使っても良いと思います。

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ありがとうございます。コメントとスタイルガイドを確認しました。
step3.cpp で使用している val_duplicate のようなものを使っていこうと思います。


## 勉強

- [他の人のコード](https://github.com/hemispherium/LeetCode_Arai60/pull/5/commits/a1e0bb0ed12ad3b03421cb10309fa8a8246d5e99)で `dummy(-1000)`を使っているのを見かけた。`-100 <= Node.val <= 100` という制約から外れるようにしているのだと理解した (参照:[このコメント](https://github.com/5103246/LeetCode_Arai60/pull/4/commits/a5301e9db863d53d1d6c4e9925cff2917555e970#r2287948164))。
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(リンク先にもコメントしましたが、)私は、個人的には意味のありそうな -1000 はあまり好まないですね。読んだ人は-1000というのはどういう事情で決まったのだろうかと思うはずです。

デバッグでは 0xDEADBEEF などで埋めるという慣習もあります。
https://ja.wikipedia.org/wiki/Hexspeak

int val_duplicate = runner->val;

// ensures runner is past the duplicated block
while (runner->val == val_duplicate) {
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

runner = runner->next を繰り返して、runner == nullptr になった場合、ヌルポインタ参照になるので
runner != nullptr が必要ですね。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants