Day20-反转链表

YVTU

🔗 LeetCode 206 - Reverse Linked List

📌 题目描述

给你单链表的头节点 head,请你反转链表,并返回反转后的链表。


🔍 示例

1
2
输入: head = [1,2,3,4,5]
输出: [5,4,3,2,1]

💡 解题思路

链表反转是经典题目,可通过迭代或递归实现。

迭代做法:

  • 使用 prev 指针保存上一个节点;
  • 每次迭代,将当前节点的 next 指向 prev
  • 向前推进 currprev

✅ JavaScript 实现

1
2
3
4
5
6
7
8
9
10
11
var reverseList = function(head) {
let prev = null;
let curr = head;
while (curr !== null) {
let next = curr.next;
curr.next = prev;
prev = curr;
curr = next;
}
return prev;
};

✅ Swift 实现

1
2
3
4
5
6
7
8
9
10
11
func reverseList(_ head: ListNode?) -> ListNode? {
var prev: ListNode? = nil
var curr = head
while curr != nil {
let next = curr?.next
curr?.next = prev
prev = curr
curr = next
}
return prev
}

🧠 思考拓展

  • 如何使用 递归 实现链表反转?
  • 如何反转部分链表(如第 m 到 n 个节点)?
  • 如何在链表反转的过程中处理带有随机指针的结构?