From 12037f1fce33fbf49cb616b829c72b6bb309dc4b Mon Sep 17 00:00:00 2001 From: Wonder Date: Fri, 3 Oct 2025 11:32:31 +0800 Subject: [PATCH] =?UTF-8?q?=20=F0=9F=94=84Update:=20=E5=8F=8D=E8=BD=AC?= =?UTF-8?q?=E9=93=BE=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 链表/2. 反转链表.md | 75 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 链表/2. 反转链表.md diff --git a/链表/2. 反转链表.md b/链表/2. 反转链表.md new file mode 100644 index 0000000..3f67c26 --- /dev/null +++ b/链表/2. 反转链表.md @@ -0,0 +1,75 @@ +# 反转链表 + +## 题目 + +给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 + + +示例 1: + + +输入:head = [1,2,3,4,5] +输出:[5,4,3,2,1] +示例 2: + + +输入:head = [1,2] +输出:[2,1] +示例 3: + +输入:head = [] +输出:[] + + +提示: + +链表中节点的数目范围是 [0, 5000] +-5000 <= Node.val <= 5000 + + +进阶:链表可以选用迭代或递归方式完成反转。你能否用两种方法解决这道题? + +## 思路 + +- 初始化 + - 设置虚拟头结点 `dummyHead` +- 头插法 + - 将新来的元素插在虚拟头结点和当前节点之间 + + +## 代码 + +```java +/** + * Definition for singly-linked list. + * public class ListNode { + * int val; + * ListNode next; + * ListNode() {} + * ListNode(int val) { this.val = val; } + * ListNode(int val, ListNode next) { this.val = val; this.next = next; } + * } + */ +class Solution { + public ListNode reverseList(ListNode head) { + // Special + if (head == null) { + return null; + } + + // Init: dummyHead + ListNode dummyHead = new ListNode(-1, null); + + // Traverse: Insert + while (head != null) { + ListNode tmp = head.next; + head.next = dummyHead.next; + dummyHead.next = head; + head = tmp; + } + + return dummyHead.next; + + } +} +``` \ No newline at end of file