From d291ab7960cc72479c1b2da7dc3ae2ba57502774 Mon Sep 17 00:00:00 2001 From: Kazuki Kitano Date: Tue, 17 Feb 2026 12:00:49 +0900 Subject: [PATCH 1/6] step1 --- memo.md | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/memo.md b/memo.md index 4bd0397..be472a8 100644 --- a/memo.md +++ b/memo.md @@ -1 +1,62 @@ # Step1 + +## アプローチ + +* 数字を順番に見ていってリストに内容を保存. リストの後ろを見ながら新しいノードを作成していく +* 前から順番に繋ぎ変えていく. + * in-placeでも, 別のノードリストを用意してもできる. +* 再帰で実装もできるけど本質的にはやること一緒. + +## Code1-1 (別のリストに数字を保存) + +```python +class Solution: + def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]: + if head is None: + return None + values = [] + while head is not None: + values.append(head.val) + head = head.next + reversed_head_dummy = ListNode() + reversed_tail = reversed_head_dummy + for i in range(len(values) - 1, -1, -1): + node = ListNode(values[i]) + reversed_tail.next = node + reversed_tail = reversed_tail.next + return reversed_head_dummy.next +``` + +## Code1-2 (別のメモリ使用. one path) + +```python +class Solution: + def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]: + if head is None: + return None + reversed_head = None + node = head + while node is not None: + new_node = ListNode(node.val) + new_node.next = reversed_head + reversed_head = new_node + node = node.next + return reversed_head +``` + +## Code1-3 (in-place, one path) + +```python +class Solution: + def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]: + if head is None: + return None + reversed_head = None + node = head + while node is not None: + next_node = node.next + node.next = reversed_head + reversed_head = node + node = next_node + return reversed_head +``` \ No newline at end of file From 26d0fd588dc38c9285cf17b66e9d1318a4b07e70 Mon Sep 17 00:00:00 2001 From: Kazuki Kitano Date: Tue, 17 Feb 2026 12:14:26 +0900 Subject: [PATCH 2/6] step3 1st --- memo.md | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 63 insertions(+), 1 deletion(-) diff --git a/memo.md b/memo.md index be472a8..ed8260f 100644 --- a/memo.md +++ b/memo.md @@ -59,4 +59,66 @@ class Solution: reversed_head = node node = next_node return reversed_head -``` \ No newline at end of file +``` + +# Step2 + +変更なし + +# Step3 + +## Code1-1 (別のリストに数字を保存) + +```python +class Solution: + def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]: + if head is None: + return None + values = [] + node = head + while node is not None: + values.append(node.val) + node = node.next + + dummy_reverse_head = ListNode() + reverse_tail = dummy_reverse_head + for value in values[::-1]: + new_node = ListNode(value) + reverse_tail.next = new_node + reverse_tail = reverse_tail.next + return dummy_reverse_head.next +``` + +## Code1-2 (別のメモリ使用. one path) + +```python +class Solution: + def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]: + if head is None: + return None + reversed_head = None + node = head + while node is not None: + new_node = ListNode(node.val) + new_node.next = reversed_head + reversed_head = new_node + node = node.next + return reversed_head +``` + +## Code1-3 (in-place, one path) + +```python +class Solution: + def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]: + if head is None: + return None + reversed_head = None + node = head + while node is not None: + next_node = node.next + node.next = reversed_head + reversed_head = node + node = next_node + return reversed_head +``` From c029b62d99e85526c41e0837179b5258feb87dda Mon Sep 17 00:00:00 2001 From: Kazuki Kitano Date: Tue, 17 Feb 2026 12:20:51 +0900 Subject: [PATCH 3/6] step3 2nd --- memo.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/memo.md b/memo.md index ed8260f..3ae7c13 100644 --- a/memo.md +++ b/memo.md @@ -79,14 +79,14 @@ class Solution: while node is not None: values.append(node.val) node = node.next - - dummy_reverse_head = ListNode() - reverse_tail = dummy_reverse_head - for value in values[::-1]: - new_node = ListNode(value) - reverse_tail.next = new_node - reverse_tail = reverse_tail.next - return dummy_reverse_head.next + + dummy_reversed_head = ListNode() + reversed_tail = dummy_reversed_head + for i in range(len(values) - 1, -1, -1): + new_node = ListNode(values[i]) + reversed_tail.next = new_node + reversed_tail = reversed_tail.next + return dummy_reversed_head.next ``` ## Code1-2 (別のメモリ使用. one path) @@ -113,12 +113,12 @@ class Solution: def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]: if head is None: return None - reversed_head = None + prev = None node = head while node is not None: next_node = node.next - node.next = reversed_head - reversed_head = node + node.next = prev + prev = node node = next_node - return reversed_head + return prev ``` From 4c78334014b0e1b78c13a6acf835d2ef802a6c0d Mon Sep 17 00:00:00 2001 From: Kazuki Kitano Date: Tue, 17 Feb 2026 12:25:19 +0900 Subject: [PATCH 4/6] step3 3rd --- memo.md | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/memo.md b/memo.md index 3ae7c13..4b5156c 100644 --- a/memo.md +++ b/memo.md @@ -79,14 +79,13 @@ class Solution: while node is not None: values.append(node.val) node = node.next - - dummy_reversed_head = ListNode() - reversed_tail = dummy_reversed_head + reversed_dummy_head = ListNode() + reversed_tail = reversed_dummy_head for i in range(len(values) - 1, -1, -1): new_node = ListNode(values[i]) reversed_tail.next = new_node reversed_tail = reversed_tail.next - return dummy_reversed_head.next + return reversed_dummy_head.next ``` ## Code1-2 (別のメモリ使用. one path) @@ -96,14 +95,14 @@ class Solution: def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]: if head is None: return None - reversed_head = None node = head + reversed_tail = None while node is not None: new_node = ListNode(node.val) - new_node.next = reversed_head - reversed_head = new_node + new_node.next = reversed_tail + reversed_tail = new_node node = node.next - return reversed_head + return reversed_tail ``` ## Code1-3 (in-place, one path) From 6210ac6d2591625715a3b5b68a32a9d84a7c3ea6 Mon Sep 17 00:00:00 2001 From: Kazuki Kitano Date: Tue, 17 Feb 2026 12:27:06 +0900 Subject: [PATCH 5/6] step3 comment --- memo.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/memo.md b/memo.md index 4b5156c..bba381c 100644 --- a/memo.md +++ b/memo.md @@ -69,6 +69,8 @@ class Solution: ## Code1-1 (別のリストに数字を保存) +* `values[::-1]`とするよりも, `range(len(values) - 1, -1, -1)`を使った方が, 配列が新たにコピーされなくて済むので効率的かと思ったが, 結局`range()`も新しく配列を新たに作成する上, 中に含まれるのはどちらも`int`型だから変わらない気がしてきた. + ```python class Solution: def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]: From edbb18a570d6b034b927356302c655ea717f8cb0 Mon Sep 17 00:00:00 2001 From: Kazuki Kitano Date: Tue, 17 Feb 2026 12:58:01 +0900 Subject: [PATCH 6/6] bugfix --- memo.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/memo.md b/memo.md index bba381c..011ad87 100644 --- a/memo.md +++ b/memo.md @@ -98,13 +98,13 @@ class Solution: if head is None: return None node = head - reversed_tail = None + reversed_head = None while node is not None: new_node = ListNode(node.val) - new_node.next = reversed_tail - reversed_tail = new_node + new_node.next = reversed_head + reversed_head = new_node node = node.next - return reversed_tail + return reversed_head ``` ## Code1-3 (in-place, one path)