From ca06096197f019190277279c5034f4235dd9a97a Mon Sep 17 00:00:00 2001 From: Evan Yang Date: Sun, 3 Oct 2021 18:59:22 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E6=9B=B4=E6=96=B0=200206.=E7=BF=BB?= =?UTF-8?q?=E8=BD=AC=E9=93=BE=E8=A1=A8.md=20=E6=B7=BB=E5=8A=A0=E9=80=92?= =?UTF-8?q?=E5=BD=92=E8=A7=A3=E6=B3=95=E6=80=9D=E8=B7=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0206.翻转链表.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/problems/0206.翻转链表.md b/problems/0206.翻转链表.md index ef2664eb..0a8b3622 100644 --- a/problems/0206.翻转链表.md +++ b/problems/0206.翻转链表.md @@ -96,6 +96,26 @@ public: }; ``` +我们可以发现,上面的递归写法和双指针法实质上都是从前往后翻转指针指向,其实还有另外一种与双指针法不同思路的递归写法:从后往前翻转指针指向。 + +具体代码如下(带详细注释): + +```c++ +class Solution { +public: + ListNode* reverseList(ListNode* head) { + // 如果链表只有一个节点,返回自身 + if (head->next == NULL) return head; + // 递归调用,翻转第二个节点开始往后的链表 + ListNode *last = reverseList(head->next); + // 翻转头节点与第二个节点的指向 + head->next->next = head; + // 此时的 head 节点为尾节点,next 需要指向 NULL + head->next = NULL; + return last; + } +}; +``` ## 其他语言版本 From 8b6346c4e8d02a68f953a9f350376d68ac9d42eb Mon Sep 17 00:00:00 2001 From: Evan Yang Date: Sun, 3 Oct 2021 19:07:45 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E6=9B=B4=E6=96=B0=200206.=E7=BF=BB?= =?UTF-8?q?=E8=BD=AC=E9=93=BE=E8=A1=A8.md=20=E4=BF=AE=E5=A4=8DJava?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E9=80=92=E5=BD=92=E5=86=99=E6=B3=95=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0206.翻转链表.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/problems/0206.翻转链表.md b/problems/0206.翻转链表.md index 0a8b3622..4e450a1b 100644 --- a/problems/0206.翻转链表.md +++ b/problems/0206.翻转链表.md @@ -155,9 +155,9 @@ class Solution { temp = cur.next;// 先保存下一个节点 cur.next = prev;// 反转 // 更新prev、cur位置 - prev = cur; - cur = temp; - return reverse(prev, cur); + // prev = cur; + // cur = temp; + return reverse(cur, temp); } } ``` From dab89905adaac01f541ecb71f2a9e30980c88249 Mon Sep 17 00:00:00 2001 From: Evan Yang Date: Sun, 3 Oct 2021 19:21:53 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E6=9B=B4=E6=96=B0=200206.=E7=BF=BB?= =?UTF-8?q?=E8=BD=AC=E9=93=BE=E8=A1=A8.md=20=E6=B7=BB=E5=8A=A0=E9=80=92?= =?UTF-8?q?=E5=BD=92=E8=A7=A3=E6=B3=95=E6=80=9D=E8=B7=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0206.翻转链表.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/problems/0206.翻转链表.md b/problems/0206.翻转链表.md index 4e450a1b..0c35f7d7 100644 --- a/problems/0206.翻转链表.md +++ b/problems/0206.翻转链表.md @@ -104,8 +104,10 @@ public: class Solution { public: ListNode* reverseList(ListNode* head) { - // 如果链表只有一个节点,返回自身 + // 边缘条件判断 + if(head == NULL) return NULL; if (head->next == NULL) return head; + // 递归调用,翻转第二个节点开始往后的链表 ListNode *last = reverseList(head->next); // 翻转头节点与第二个节点的指向 From abd3358314f9580a5a43540c22aa861cb20f0105 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A8=8B=E5=BA=8F=E5=91=98Carl?= Date: Tue, 5 Oct 2021 14:21:08 +0800 Subject: [PATCH 4/4] =?UTF-8?q?Update=200206.=E7=BF=BB=E8=BD=AC=E9=93=BE?= =?UTF-8?q?=E8=A1=A8.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0206.翻转链表.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/problems/0206.翻转链表.md b/problems/0206.翻转链表.md index 0c35f7d7..ec6f3dca 100644 --- a/problems/0206.翻转链表.md +++ b/problems/0206.翻转链表.md @@ -100,7 +100,7 @@ public: 具体代码如下(带详细注释): -```c++ +```CPP class Solution { public: ListNode* reverseList(ListNode* head) {