-
Notifications
You must be signed in to change notification settings - Fork 0
206. Reverse Linked List #7
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
メモがわかりやすくて、思考のステップが追いやすかったです 👍
# self.next = next | ||
class Solution: | ||
def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]: | ||
reversed_list = None |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nit
この変数が保持するのは厳密には(?)なんらかのlistではなくnodeなので、reversed_head
のような名付けの方が齟齬がないかと思いました。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ここ少し迷ったんですがその方がいいですね
迷った点としてはメソッド名がreverseListなので、変数も合わせた方が良いのかなと思いましたが、やっぱりListと混同しそうなのでreversed_headが良いと思いました
... | ||
と作っていくので、与えられた連結リストを順番通りにたどりながら逆順にした連結リストを作れる。 | ||
|
||
再帰でもできそうだが、スタックオーバーフローしてしまうので避ける(ノード数が5000までだが、プラットフォームによるがデフォルトだと最大で1000なので)。 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
PyPyのほうは実装確認できてなかったです、ありがとうございます!
if head is None or head.next is None: | ||
return head | ||
|
||
node = head |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
再帰的に問題を分割していて、部分問題で見たらずっとhead
に対して操作をしているので、node
という別の名前を与えなくてもいいと思います。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
たしかにそうですね
同じ参照(head)に対して操作しているのでnodeという別の名前は不要だと思いました
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
コメントを踏まえて実装しました
395d517
node.next = reversed_list | ||
reversed_list = node | ||
node = next_node | ||
return reversed_list |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
繋ぎかえで書くなら、単にnode
と書くより、relinking
などと命名した方が意図が伝わりやすいと思います。
class Solution:
def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
relinking = head
relinked = None
while relinking is not None:
next_relinking = relinking.next
relinking.next = relinked
relinked = relinking
relinking = next_relinking
return relinked
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
なるほど、relinkをベースとした命名もありですね
下記の役割だと思うので、relinkedはlast_relinkedが良いと思いましたがいかがでしょう?
- 次に繋ぎ変えるノード: next_relinking
- 繋ぎ変えているノード: relinking
- 繋ぎ変えたノードの一番最後: last_relinked
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
コメントを踏まえて実装しました
dc739b0
``` | ||
|
||
## step3 | ||
3パターンで実装した。 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
違いは何を約束して次に回すかですね。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ですね
・新しく作る方式: 現在までのノードで構成されていて、かつ逆順になった新しいListNodeを次に回す
・付け替え方式: 現在までのノードが逆順になった状態で次に回す
・再帰付け替え方式: 現在のノード以降が逆順になった状態で次に回す
だと理解してます
新しく作る方式だと1通りで、付け替えだと前後ろの2通りあります
問題:206. Reverse Linked List
次の問題:703. Kth Largest Element in a Stream