Skip to content

[LeetCode 24] 两两交换链表中的节点

中等已解决Aug 27, 2025(2天前) 时间 O(n) 空间 O(n) 原题链接

🎯 请点击上方原题链接,查看题目描述👆

💭 解题思路#

这道题要求两两交换链表中相邻的节点,可以使用递归来解决。核心思路是将问题分解为:

  1. 交换当前的两个节点
  2. 递归处理剩余的链表
  3. 连接交换后的结果

💻 代码实现#

class Solution {
public ListNode swapPairs(ListNode head) {
// 递归终止条件:链表为空或只有一个节点
if(head == null || head.next == null)
return head;
// 保存关键节点
ListNode a = head; // 第一个节点
ListNode b = head.next; // 第二个节点
ListNode c = head.next.next; // 后续链表的头节点
// 递归处理后续链表
ListNode temp = swapPairs(c);
// 执行交换:b -> a -> temp
b.next = a; // b指向a
a.next = temp; // a指向递归结果
// 返回交换后的新头节点
return b;
}
}

时间复杂度: O(n) - 每个节点访问一次
空间复杂度: O(n) - 递归调用栈的深度