From e3f4f3c0c8bbce2c1e369b869a8ce30f4253f91e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E8=B7=AF=E7=94=9F?= <312885991@qq.com> Date: Sat, 25 Feb 2023 14:24:27 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=200206.=E7=BF=BB=E8=BD=AC?= =?UTF-8?q?=E9=93=BE=E8=A1=A8=20=E5=8D=95=E7=BA=AF=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E8=99=9A=E6=8B=9F=E5=A4=B4=E7=BB=93=E7=82=B9=E5=AE=9E=E7=8E=B0?= =?UTF-8?q?=E9=93=BE=E8=A1=A8=E7=BF=BB=E8=BD=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0206.翻转链表.md | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/problems/0206.翻转链表.md b/problems/0206.翻转链表.md index 016477ae..b87c7cba 100644 --- a/problems/0206.翻转链表.md +++ b/problems/0206.翻转链表.md @@ -682,7 +682,33 @@ public class LinkNumbers +## 使用虚拟头结点解决链表翻转 + +> 使用虚拟头结点,通过头插法实现链表的翻转(不需要栈) + +```java +// 迭代方法:增加虚头结点,使用头插法实现链表翻转 +public static ListNode reverseList1(ListNode head) { + // 创建虚头结点 + ListNode dumpyHead = new ListNode(-1); + dumpyHead.next = null; + // 遍历所有节点 + ListNode cur = head; + while(cur != null){ + ListNode temp = cur.next; + // 头插法 + cur.next = dumpyHead.next; + dumpyHead.next = cur; + cur = temp; + } + return dumpyHead.next; +} +``` + + + ## 使用栈解决反转链表的问题 + * 首先将所有的结点入栈 * 然后创建一个虚拟虚拟头结点,让cur指向虚拟头结点。然后开始循环出栈,每出来一个元素,就把它加入到以虚拟头结点为头结点的链表当中,最后返回即可。 @@ -720,3 +746,4 @@ public ListNode reverseList(ListNode head) { +