🎯 请点击上方原题链接,查看题目描述👆
💭 解题思路#
这道题要求两两交换链表中相邻的节点,可以使用递归来解决。核心思路是将问题分解为:
- 交换当前的两个节点
- 递归处理剩余的链表
- 连接交换后的结果
💻 代码实现#
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) - 递归调用栈的深度