Conversation
| result = stack.pop() | ||
| dummy_node = ListNode(-1, result) |
There was a problem hiding this comment.
コメントありがとうございます。
確かにresult = dummy_nodeとしてresult.nextを変更する形で問題ないですね。
これで余計な場合分けがなくスッキリします。
| @@ -0,0 +1,164 @@ | |||
| 1st. | |||
| stackにnodeをひとつづつ積んでいってすべて積み終わった後それを取り出せばいけると方針はすぐ立ったので実装にかかった。 | |||
| 順番に取り出して行くときに始まりがないといけないので一つだけ取り出したがこれが良かった科は分からない。 | |||
There was a problem hiding this comment.
これは、番兵を立てるか、はじめの一つを特殊にするか、loop の中で分岐させるかでしょう。
There was a problem hiding this comment.
コメントありがとうございます。
始めの一つが.nextを変更されることがない特別なnodeであることに気づいたときに、
これらの選択肢がパッと出るように訓練したいです。
|
|
||
| return dummy_node.next | ||
| ``` | ||
| と書いてMemory Limited Exceededになっていた。これは最後にresultに追加したnodeのnextは変更されておらず一つ前にresultに入ったnodeを指しているのでその二つのnodeがお互いを指すループになっていて抜け出せないということ。 |
| class Solution: | ||
| def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]: | ||
| node = head | ||
| stack = deque() |
There was a problem hiding this comment.
listをstackとして扱うこともできます。
https://docs.python.org/3/tutorial/datastructures.html#using-lists-as-stacks
| node = node.next | ||
|
|
||
| dummy_node = ListNode() | ||
| result = dummy_node |
There was a problem hiding this comment.
resultという変数名と、reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]という関数名+type hintから、resultが逆順にしたリストの何某かであることはわかるのですが、先頭なのか末尾なのか、はたまた別の何かなのか一見するとわかりにくいので、自分だったらreversed_tailとかつけるかなと思います。
それと関連して、dummy_nodeをdummy_reversed_headもしくはdummy_headとします。
| node = head | ||
| new_next = None | ||
|
|
||
| while node: | ||
| old_next = node.next | ||
| node.next = new_next | ||
| new_next = node | ||
| node = old_next | ||
|
|
||
| return new_next |
There was a problem hiding this comment.
old, newという対比はわかりやすいですが、その二つで何が違うのか表せないので、自分ならoriginal, reversed (transformed)とするかと思います。
また、new_nextと変数名にnextをつけたのは、おそらくL159を意識しての事だと思いますが、ループを抜けた後まで通じやすい変数名ではないかもしれません。t0hsumi/leetcode#7 (comment)
以上を合わせて、自分なら、nodeをoriginal_head, new_nextをreversed_headとして、まだひっくり返していないリストの先頭と、もうひっくり返したリストの先頭を辿っていじる形にすると思います。
There was a problem hiding this comment.
コメントありがとうございます。
それが最適だと感じます。
コードの読み手から見たときにoriginal, reveresedが最も伝わりやすいですね。
上でも丁寧にコメントいただきありがとうございました。
問題:https://leetcode.com/problems/reverse-linked-list/description/