Skip to content

Commit fcf444f

Browse files
committed
docs(leetcode-21): update section numbering, heading levels, and dummy node allocation explanations across languages
1 parent 70e7b04 commit fcf444f

6 files changed

Lines changed: 21 additions & 18 deletions

File tree

DataStructures/LinkedLists/leetcode/21. Merge Two Sorted Lists/Sonnet 5/Merge-Two-Sorted-Lists-Go.md

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,25 +10,25 @@
1010
- **業務開発視点**: 可読性・保守性・型安全性・エラーハンドリング重視
1111
- **Go特有考慮**: ゴルーチン、チャネル、スライス最適化、エスケープ解析
1212

13-
#### 競技プログラミング視点
13+
### 競技プログラミング視点
1414

1515
- **制約分析**: ノード数は最大50件×2リストなので、どんなアルゴリズムを選んでも実行時間の心配はほぼありません。ここでは「制約に守られて何でも通る」問題ではなく「正しい設計を学ぶための」問題として扱います。
1616
- **最速手法**: 各ノードを1回ずつしか見ない反復(ループ)処理が理論上も実装上も最速。時間計算量は O(n+m)(n, mはそれぞれのリスト長)。
17-
- **メモリ最小化**: 新しいノードを一切生成せず、既存ノードの `Next` フィールドだけを付け替える「スプライシング(splicing、つなぎ替え)」で空間計算量 O(1) を実現します。
17+
- **メモリ最小化**: ダミーノードを1つ割り当て、他の新しいリストノードは作成せずに既存ノードの `Next` フィールドだけを付け替える「スプライシング(splicing、つなぎ替え)」で補助記憶空間(Auxiliary Space)O(1) を実現します。
1818
- **Go最適化**: `*ListNode` はすでにポインタなので、関数の引数として渡す際に構造体全体がコピーされることはありません(ポインタという「住所」だけがコピーされる)。これはGoにおける大きな構造体の受け渡しコストを避ける典型的なパターンです。
1919

20-
#### 業務開発視点
20+
### 業務開発視点
2121

2222
- **型安全設計**: `*ListNode`(ポインタ型)であることそのものが「値が存在するかもしれないし `nil` かもしれない」ことを表現しています。GoにはTypeScriptの `Optional<T>` のような専用構文はありませんが、ポインタ型は本質的に同じ役割(nil許容)を担います。
2323
- **エラーハンドリング**: 前述の通り、`nil` は異常値ではなく正常な空リストなので、`error` を返したり `panic` を起こしたりする必要はありません。むしろ、`nil` チェックを怠って `list1.Val` にいきなりアクセスすると `nil` ポインタ参照によるパニック(=Goで回復不能なエラーが発生した際に起きる強制終了)が起きるため、**アクセス前に必ず `nil` チェックを行う**という点こそが本質的な安全対策です。
2424
- **可読性**: ダミーノード(番兵ノード)パターンを使うことで、「リストが空のときの特別扱い」の分岐を書かずに済み、コード全体がシンプルになります。
2525

26-
#### Go特有分析
26+
### Go特有分析
2727

2828
- **データ構造選択**: スライス(`[]T`)やマップ(`map[K]V`)は使いません。この問題は自前の連結ノード構造(`*ListNode`)のポインタを直接つなぎ替える問題であり、Go標準コレクションへの変換はメモリ面でも計算量面でも不利になるためです。
2929
- **標準ライブラリ活用度**: `sort``container/heap` を持ち出すこともできますが、単純な2本のポインタ比較で事足りるため、標準ライブラリへの依存はむしろ過剰設計になります。
3030
- **並行処理適性**: 前述の通り、逐次依存性が強いアルゴリズムのため並行処理には向きません。
31-
- **エスケープ解析**: 今回のアルゴリズムは新しいノードを1つも生成しない(`&ListNode{}` のような `new` 相当の操作を行わない)ため、ヒープへの新規アロケーションは基本的に発生しません。唯一生成するのはダミーノード1つだけで、これは関数のスコープを超えて戻り値(`dummy.Next` を辿った先)から間接的に参照され続けるため、コンパイラのエスケープ解析(=変数をスタックに置けるかヒープに置くべきかをコンパイラが自動判断する仕組み)によって**ヒープに配置されます**(スタックに置くと関数終了後に消えてしまい、返したポインタが無効になるため)
31+
- **エスケープ解析**: 今回のアルゴリズムではダミーノードを1つ割り当て、他の新しいリストノードは作成しません。生成されるダミーノードの割り当て場所(スタックかヒープか)はコンパイラのエスケープ解析に依存します。いずれにせよ、それ以外の新規ノード生成は一切行わないため、メモリ消費は最小限に抑えられます
3232

3333
> 📖 **このセクションで登場した用語**
3434
>
@@ -66,7 +66,7 @@
6666
6767
---
6868

69-
## 2. 採用アルゴリズムと根拠
69+
## 3. 採用アルゴリズムと根拠
7070

7171
- **選択理由**:方法Aは方法Bと同じ O(n+m) の時間計算量を持ちながら、空間計算量は O(1) で済みます。方法B(再帰)はコールスタックにO(n+m)を消費するため、入力サイズが大きくなった場合に「スタックオーバーフロー」に近い問題(Goでは実際にはゴルーチンのスタックは自動拡張されるため即座にクラッシュはしませんが、無駄なメモリ消費であることに変わりはありません)を抱えます。方法Cは `sort.Slice` が内部で効率的にソートしてくれるとしても、「すでにソート済み」という問題の前提を捨てており、時間・空間の両方で無駄があります。
7272
- **Go最適化戦略**
@@ -83,7 +83,7 @@
8383
8484
---
8585

86-
## 3. 実装パターン
86+
## 4. 実装パターン
8787

8888
> 💡 コード全体の骨格:
8989
>
@@ -250,7 +250,7 @@ func mergeTwoLists(list1 *ListNode, list2 *ListNode) *ListNode {
250250
251251
---
252252
253-
## 4. 検証
253+
## 5. 検証
254254
255255
> 💡 エッジケースとは「入力が空・最小値・最大値・重複あり」など、通常とは異なる境界的な入力のことです。境界値の確認は、アルゴリズムが"ふつうの入力"だけでなく"極端な入力"でも正しく動くかを確かめるために重要です。
256256
@@ -272,7 +272,7 @@ func mergeTwoLists(list1 *ListNode, list2 *ListNode) *ListNode {
272272
273273
---
274274
275-
## 5. 提出前チェックリスト
275+
## 6. 提出前チェックリスト
276276
277277
- [x] `go vet ./...` でエラーなし(`nil` 比較・型はすべて明示的)
278278
- [x] エラーハンドリング:本問題では `nil` が正常値であるため `error` 戻り値は不要と判断(コメントで明示)

DataStructures/LinkedLists/leetcode/21. Merge Two Sorted Lists/Sonnet 5/Merge-Two-Sorted-Lists-Java.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,8 +97,9 @@ class Solution {
9797
/**
9898
* 2つのソート済み連結リストを1つのソート済み連結リストにマージする。
9999
*
100-
* 新しいノードは一切作成せず、既存ノードの next 参照をつなぎ替える
101-
* (スプライシング)ことでマージするため、空間計算量は O(1) となる。
100+
* new ListNode(0) ダミーノードを1つだけアロケーションし、他の新しいリストノードは作成せずに
101+
* 既存ノードの next 参照をつなぎ替える(スプライシング)ことでマージするため、
102+
* 補助記憶空間(Auxiliary Space)は O(1) となる。
102103
*
103104
* @param list1 1つ目のソート済み連結リストの先頭ノード。
104105
* null の場合は「空のリスト」を表す(異常値ではない)

DataStructures/LinkedLists/leetcode/21. Merge Two Sorted Lists/Sonnet 5/Merge-Two-Sorted-Lists-Python.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,8 +106,9 @@ class Solution:
106106
「空のリストが渡された」という正常な状態を表す。
107107
そのため ValueError 等は送出しない。
108108
109-
新しいノードは一切作成せず、既存ノードの next 参照をつなぎ替える
110-
(スプライシング)ことでマージするため、空間計算量は O(1) となる。
109+
ListNode() ダミーノードを1つだけアロケーションし、他の新しいリストノードは作成せずに
110+
既存ノードの next 参照をつなぎ替える(スプライシング)ことでマージするため、
111+
補助記憶空間(Auxiliary Space)は O(1) となる。
111112
112113
Args:
113114
list1: 1つ目のソート済み連結リストの先頭ノード(空リストなら None)

DataStructures/LinkedLists/leetcode/21. Merge Two Sorted Lists/Sonnet 5/Merge-Two-Sorted-Lists-Rust.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
**競技プログラミング視点での分析**
1010

1111
- 実行速度を最優先するなら、各ノードを1回ずつ見るだけで済む処理が最速。時間計算量は O(n+m)。
12-
- メモリ使用量の最小化方針としては、**新しい `Box` を1つも生成せず、既存の `Box<ListNode>` を移動(move)させるだけ**でマージを完了させます。ヒープアロケーション(=ヒープ上にメモリを新たに確保する操作)はゼロ回に抑えられます
12+
- メモリ使用量の最小化方針としては、ダミーの `Box` を1つ割り当て、他の新しいノードは作成せず既存の `Box<ListNode>` を移動(move)させるだけでマージを完了させます。補助記憶空間(Auxiliary Space)は O(1) に保たれます
1313

1414
**業務開発視点での分析**
1515

DataStructures/LinkedLists/leetcode/21. Merge Two Sorted Lists/Sonnet 5/Merge-Two-Sorted-Lists-Typescript.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,8 +102,9 @@ class ListNode {
102102
/**
103103
* 2つのソート済み連結リストを1つのソート済み連結リストにマージする。
104104
*
105-
* 新しいノードは一切作成せず、既存ノードの next 参照をつなぎ替える
106-
* (スプライシング)ことでマージするため、空間計算量は O(1) となる。
105+
* new ListNode(0) ダミーノードを1つだけアロケーションし、他の新しいリストノードは作成せずに
106+
* 既存ノードの next 参照をつなぎ替える(スプライシング)ことでマージするため、
107+
* 補助記憶空間(Auxiliary Space)は O(1) となる。
107108
*
108109
* 重要:list1 / list2 が null であることは異常値ではなく、
109110
* 「空のリストが渡された」という正常な状態を表す。

public/index.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -517,8 +517,8 @@ <h1 class="site-title">
517517
<li class="file-item" data-category="algorithm"><a class="file-link" href="Algorithm/BinarySearch/leetcode/81.%20Search%20in%20Rotated%20Sorted%20Array%20II/Claude/README.html"><span class="card-header"><span class="card-icon">🧩</span><span class="card-title">Search in Rotated Sorted Array II - Technical Analysis</span></span><span class="file-path">Algorithm/BinarySearch/leetcode/81. Search in Rotated Sorted Array II/Claude/README.html</span></a></li>
518518
<li class="file-item" data-category="algorithm"><a class="file-link" href="Algorithm/Other/leetcode/73.%20Set%20Matrix%20Zeroes/Claude/README.html"><span class="card-header"><span class="card-icon">🧩</span><span class="card-title">Set Matrix Zeroes Algorithm - Python Implementation</span></span><span class="file-path">Algorithm/Other/leetcode/73. Set Matrix Zeroes/Claude/README.html</span></a></li>
519519
<li class="file-item" data-category="algorithm"><a class="file-link" href="Algorithm/Dutch%20National%20Flag/leetcode/75.%20Sort%20Colors/Claude/README.html"><span class="card-header"><span class="card-icon">🧩</span><span class="card-title">Sort Colors Algorithm - Interactive Technical Guide</span></span><span class="file-path">Algorithm/Dutch National Flag/leetcode/75. Sort Colors/Claude/README.html</span></a></li>
520-
<li class="file-item" data-category="algorithm"><a class="file-link" href="Algorithm/Other/leetcode/54.%20Spiral%20Matrix/Claude/README.html"><span class="card-header"><span class="card-icon">🧩</span><span class="card-title">Spiral Matrix Algorithm Analysis</span></span><span class="file-path">Algorithm/Other/leetcode/54. Spiral Matrix/Claude/README.html</span></a></li>
521520
<li class="file-item" data-category="algorithm"><a class="file-link" href="Algorithm/Other/leetcode/59.%20Spiral%20Matrix%20II/Claude/README.html"><span class="card-header"><span class="card-icon">🧩</span><span class="card-title">Spiral Matrix Algorithm Analysis</span></span><span class="file-path">Algorithm/Other/leetcode/59. Spiral Matrix II/Claude/README.html</span></a></li>
521+
<li class="file-item" data-category="algorithm"><a class="file-link" href="Algorithm/Other/leetcode/54.%20Spiral%20Matrix/Claude/README.html"><span class="card-header"><span class="card-icon">🧩</span><span class="card-title">Spiral Matrix Algorithm Analysis</span></span><span class="file-path">Algorithm/Other/leetcode/54. Spiral Matrix/Claude/README.html</span></a></li>
522522
<li class="file-item" data-category="algorithm"><a class="file-link" href="Algorithm/Other/leetcode/90.%20Subsets%20II/Claude/README.html"><span class="card-header"><span class="card-icon">🧩</span><span class="card-title">Subsets II - 反復的拡張法による重複排除 | アルゴリズム解説</span></span><span class="file-path">Algorithm/Other/leetcode/90. Subsets II/Claude/README.html</span></a></li>
523523
<li class="file-item" data-category="algorithm"><a class="file-link" href="Algorithm/TwoPointers/leetcode/80.%20Remove%20Duplicates%20from%20Sorted%20Array%20II/Claude/README.html"><span class="card-header"><span class="card-icon">🧩</span><span class="card-title">Two-Pointer Algorithm: Remove Duplicates from Sorted Array II</span></span><span class="file-path">Algorithm/TwoPointers/leetcode/80. Remove Duplicates from Sorted Array II/Claude/README.html</span></a></li>
524524
<li class="file-item" data-category="algorithm"><a class="file-link" href="Algorithm/BinarySearch/leetcode/34.%20Find%20First%20and%20Last%20Position%20of%20Element%20in%20Sorted%20Array/READEME-typescript.html"><span class="card-header"><span class="card-icon">🧩</span><span class="card-title">TypeScript Binary Search Performance Analysis</span></span><span class="file-path">Algorithm/BinarySearch/leetcode/34. Find First and Last Position of Element in Sorted Array/READEME-typescript.html</span></a></li>
@@ -709,8 +709,8 @@ <h1 class="site-title">
709709
<li class="file-item" data-category="algorithm"><a class="file-link" href="Algorithm/BinarySearch/leetcode/81.%20Search%20in%20Rotated%20Sorted%20Array%20II/Claude/README.html"><span class="card-header"><span class="card-icon">🧩</span><span class="card-title">Search in Rotated Sorted Array II - Technical Analysis</span></span><span class="file-path">Algorithm/BinarySearch/leetcode/81. Search in Rotated Sorted Array II/Claude/README.html</span></a></li>
710710
<li class="file-item" data-category="algorithm"><a class="file-link" href="Algorithm/Other/leetcode/73.%20Set%20Matrix%20Zeroes/Claude/README.html"><span class="card-header"><span class="card-icon">🧩</span><span class="card-title">Set Matrix Zeroes Algorithm - Python Implementation</span></span><span class="file-path">Algorithm/Other/leetcode/73. Set Matrix Zeroes/Claude/README.html</span></a></li>
711711
<li class="file-item" data-category="algorithm"><a class="file-link" href="Algorithm/Dutch%20National%20Flag/leetcode/75.%20Sort%20Colors/Claude/README.html"><span class="card-header"><span class="card-icon">🧩</span><span class="card-title">Sort Colors Algorithm - Interactive Technical Guide</span></span><span class="file-path">Algorithm/Dutch National Flag/leetcode/75. Sort Colors/Claude/README.html</span></a></li>
712-
<li class="file-item" data-category="algorithm"><a class="file-link" href="Algorithm/Other/leetcode/54.%20Spiral%20Matrix/Claude/README.html"><span class="card-header"><span class="card-icon">🧩</span><span class="card-title">Spiral Matrix Algorithm Analysis</span></span><span class="file-path">Algorithm/Other/leetcode/54. Spiral Matrix/Claude/README.html</span></a></li>
713712
<li class="file-item" data-category="algorithm"><a class="file-link" href="Algorithm/Other/leetcode/59.%20Spiral%20Matrix%20II/Claude/README.html"><span class="card-header"><span class="card-icon">🧩</span><span class="card-title">Spiral Matrix Algorithm Analysis</span></span><span class="file-path">Algorithm/Other/leetcode/59. Spiral Matrix II/Claude/README.html</span></a></li>
713+
<li class="file-item" data-category="algorithm"><a class="file-link" href="Algorithm/Other/leetcode/54.%20Spiral%20Matrix/Claude/README.html"><span class="card-header"><span class="card-icon">🧩</span><span class="card-title">Spiral Matrix Algorithm Analysis</span></span><span class="file-path">Algorithm/Other/leetcode/54. Spiral Matrix/Claude/README.html</span></a></li>
714714
<li class="file-item" data-category="algorithm"><a class="file-link" href="Algorithm/Other/leetcode/90.%20Subsets%20II/Claude/README.html"><span class="card-header"><span class="card-icon">🧩</span><span class="card-title">Subsets II - 反復的拡張法による重複排除 | アルゴリズム解説</span></span><span class="file-path">Algorithm/Other/leetcode/90. Subsets II/Claude/README.html</span></a></li>
715715
<li class="file-item" data-category="algorithm"><a class="file-link" href="Algorithm/TwoPointers/leetcode/80.%20Remove%20Duplicates%20from%20Sorted%20Array%20II/Claude/README.html"><span class="card-header"><span class="card-icon">🧩</span><span class="card-title">Two-Pointer Algorithm: Remove Duplicates from Sorted Array II</span></span><span class="file-path">Algorithm/TwoPointers/leetcode/80. Remove Duplicates from Sorted Array II/Claude/README.html</span></a></li>
716716
<li class="file-item" data-category="algorithm"><a class="file-link" href="Algorithm/BinarySearch/leetcode/34.%20Find%20First%20and%20Last%20Position%20of%20Element%20in%20Sorted%20Array/READEME-typescript.html"><span class="card-header"><span class="card-icon">🧩</span><span class="card-title">TypeScript Binary Search Performance Analysis</span></span><span class="file-path">Algorithm/BinarySearch/leetcode/34. Find First and Last Position of Element in Sorted Array/READEME-typescript.html</span></a></li>

0 commit comments

Comments
 (0)