Skip to content

206. Reverse Linked List #9

Open
xbam326 wants to merge 4 commits into
mainfrom
206
Open

206. Reverse Linked List #9
xbam326 wants to merge 4 commits into
mainfrom
206

Conversation

@xbam326
Copy link
Copy Markdown
Owner

@xbam326 xbam326 commented Jan 1, 2026

解く問題
Reverse Linked List

次に解く問題
Kth Largest Element In A Stream

Comment on lines +19 to +22
forward = node.next
node.next = previous
previous = node
node = forward
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

ここの複雑なお手玉をいかに分かりやすく書くかが腕の見せどころだと思います。(私もはじめは使っていたのですが)forwardprevious は文脈を読み手と共有できていないと、何の次・前なのか伝わりません。

forward は次に処理するノードへの参照の退避先なので、saved_next とか next_node の方が分かりやすいかもしれません。

previous はすでに反転済みの最後なので last_reversed とかどうでしょうか。

また、処理単位ごとに空行で分けるとなおわかりよいかもしれません。

Suggested change
forward = node.next
node.next = previous
previous = node
node = forward
# 次のループに渡す参照の退避
forward = node.next
       # 入れ替え処理
node.next = previous
# 次のループへの引き継ぎ
previous = node
node = forward

@Yuto729
Copy link
Copy Markdown

Yuto729 commented Jan 1, 2026

コメント集にもありますが他の解法として再帰をつかったやり方もありますね

再帰、各ノードに人を立たせて見たらいいと思うんですよ。
考え方としては、5番目の人が6番目の人に、何を渡して、何を返してもらうか、だと思います。
頭から5番目までひっくり返した物を渡して、全部がひっくり返ったものを返してもらう。
何も渡さずに、6番目以降をひっくり返したものを返してもらう。くらいじゃないでしょうか。
その時に、頭と尻尾を渡さないと、作業するのに困る場合がありますね。

goto-untrapped/Arai60#27 (comment)

- https://github.com/tNita/arai60/pull/8/files
- `スタックとして使うのであれば list で十分だと思います。一般に、同じ目的に使えるデータ構造が複数ある場合、その中で一番実装が軽いものを選ぶことが多いように思います。`
- dequeをstackとして使う人がいるなとは思っていたが、どっちでもいいなら書く量が少ない普通のlist派だった
- deque派の意見が聞きたいところ
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

どちらでもいいと思います。List はリアロケーションで遅くなるときがあるので、それが本当に問題になるような場合には deque というくらいですかね。

- 最初から処理する方の再帰と再帰でcallStackに積んで(言葉があっているかは怪しい)積み終わったのちに順々に処理しているように見える
- `関数は基本的に中を読みたくないのです。`なので関数名が長く説明的でも良いみたい
- headがNoneの時は一番最初にNoneを返した方が最後で場合分けするより実装時に考慮事項が減り楽出し、読んでる時にもListNodeが入っている前提で読めるのでわかりやすい
- 頭がこんがらがっているので問題をお気に入りしておき再帰はまた今後やる
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

再帰関数は、関数自体はマニュアルだと思って、大量の部下にそのマニュアルをバラマキ、部下同士が仕事を依頼し合うと考えるとできませんかね。

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