From ab35e67f577f19d5bd20a2aebac8a7003a369213 Mon Sep 17 00:00:00 2001 From: liruly <141731612+liruly@users.noreply.github.com> Date: Tue, 13 Jan 2026 10:07:39 +0900 Subject: [PATCH 1/2] Add: 206 --- .../206_ReverseLinkedList.cpp | 73 ++++++++++++ .../206_ReverseLinkedList.md | 109 ++++++++++++++++++ 2 files changed, 182 insertions(+) create mode 100644 206_ReverseLinkedList/206_ReverseLinkedList.cpp create mode 100644 206_ReverseLinkedList/206_ReverseLinkedList.md diff --git a/206_ReverseLinkedList/206_ReverseLinkedList.cpp b/206_ReverseLinkedList/206_ReverseLinkedList.cpp new file mode 100644 index 0000000..622940d --- /dev/null +++ b/206_ReverseLinkedList/206_ReverseLinkedList.cpp @@ -0,0 +1,73 @@ +// data_structures +struct ListNode { + int val; + ListNode *next; + ListNode() : val(0), next(nullptr) {} + ListNode(int x) : val(x), next(nullptr) {} + ListNode(int x, ListNode *next) : val(x), next(next) {} +}; + +// Step1 +#include + +class Solution { +public: + ListNode* reverseList(ListNode* head) { + std::stack st; + ListNode *node = head; + ListNode dummy(0); + + while (node != nullptr) { + st.push(node); + node = node->next; + } + node = &dummy; + while (!st.empty()) { + node->next = st.top(); + st.pop(); + node = node->next; + } + node->next = nullptr; + return dummy.next; + } +}; + +// Step2 +class Solution { +public: + ListNode* reverseList(ListNode* head) { + ListNode *node = head; + ListNode *prev = nullptr; + ListNode *temp = head; + + while (node != nullptr) { + temp = node->next; + node->next = prev; + if (temp == nullptr) { + break; + } + prev = node; + node = temp; + } + return node; + } +}; + +// Step3 +class Solution { +public: + ListNode* reverseList(ListNode* head) { + ListNode *node = head; + ListNode *prev = nullptr; + + while (node != nullptr) { + ListNode *temp; + temp = node->next; + node->next = prev; + + prev = node; + node = temp; + } + return prev; + } +}; diff --git a/206_ReverseLinkedList/206_ReverseLinkedList.md b/206_ReverseLinkedList/206_ReverseLinkedList.md new file mode 100644 index 0000000..c66e989 --- /dev/null +++ b/206_ReverseLinkedList/206_ReverseLinkedList.md @@ -0,0 +1,109 @@ +# 206. Reverse Linked List +- 問題文: [206. Reverse Linked List](https://leetcode.com/problems/reverse-linked-list/description/) +- 使用言語: C++ +- 次に解く問題: [703. Kth Largest Element in a Stream](https://leetcode.com/problems/kth-largest-element-in-a-stream/description/) + +## 知識セット +### 知っていたこと +- 計算量の概念 +- Stackの扱い方 +- ポインタの扱い方 + +### 今回調べたこと +- + +## Step1 Stack +- 所要時間: 10min. +- 方針: Stackに格納して最後に取り出す + - stackのカテゴリなので一応やってみる + - 最後のnodeはnextをnullポインタで埋めないといけない + - for文で要素数を使って実行しようと思ったが、要素数は可変だからうまくいかなかった +- コード +```cpp +#include + +class Solution { +public: + ListNode* reverseList(ListNode* head) { + std::stack st; + ListNode *node = head; + ListNode dummy(0); + + while (node != nullptr) { + st.push(node); + node = node->next; + } + node = &dummy; + while (!st.empty()) { + node->next = st.top(); + st.pop(); + node = node->next; + } + node->next = nullptr; + return dummy.next; + } +}; +``` +- 計算量 + - 時間計算量: O(N) + - 空間計算量: O(N) + +## Step2 ポインタ操作 +- 所要時間: 20min. +- 方針: ポインタを用いていい感じにreverseする + - 計算量の観点でも実装のわかりやすさからもこっちが第一選択なように思う + - ロジックが見えづらくなってしまったのでStep3でリファクタリングする +- コード +```cpp +class Solution { +public: + ListNode* reverseList(ListNode* head) { + ListNode *node = head; + ListNode *prev = nullptr; + ListNode *temp = head; + + while (node != nullptr) { + temp = node->next; + node->next = prev; + if (temp == nullptr) { + break; + } + prev = node; + node = temp; + } + return node; + } +}; +``` +- 計算量 + - 時間計算量: O(N) + - 空間計算量: O(1) + +## Step3 +- 所要時間: min +- 方針: リファクタリング + - breakは不要で、最後にprevをretすれば足りる + - tempに避難させてnextを書き換え、prev/nodeを同時に進める +- コード +```cpp +class Solution { +public: + ListNode* reverseList(ListNode* head) { + ListNode *node = head; + ListNode *prev = nullptr; + + while (node != nullptr) { + ListNode *temp; + temp = node->next; + node->next = prev; + + prev = node; + node = temp; + } + return prev; + } +}; +``` +- 計算量 + - 時間計算量: O(N) + - 空間計算量: O(1) From ba9b53dcf777ec06b985d8b70770c16e50d0e7c2 Mon Sep 17 00:00:00 2001 From: liruly <141731612+liruly@users.noreply.github.com> Date: Tue, 13 Jan 2026 10:09:33 +0900 Subject: [PATCH 2/2] docs: insert Arai60 url --- template.md | 1 + 1 file changed, 1 insertion(+) diff --git a/template.md b/template.md index 05459af..a9e648c 100644 --- a/template.md +++ b/template.md @@ -1,4 +1,5 @@ # Num. Title +- [Arai60](https://1kohei1.com/leetcode/) - 問題文: [Title](Url) - 使用言語: C++ - 次に解く問題: [NextTitle](NextUrl)