Files
LeetCode/链表/2. 反转链表.md
T
2025-10-03 11:32:31 +08:00

75 lines
1.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 反转链表
## 题目
给你单链表的头节点 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;
}
}
```