题目链接:https://leetcode.cn/problems/swap-nodes-in-pairs/
递归解法及思路:
复杂度分析:
时间复杂度:O(n),其中 n 是链表的节点数量。需要对每个节点进行更新指针的操作。
空间复杂度:O(n),其中 n 是链表的节点数量。空间复杂度主要取决于递归调用的栈空间。
递归小讲:
1,如果不会没有思路,那么就手动简单模拟一下
2,做好每一次该做的,不要多做也不要少做
3,这个递归是自顶向下的过程
思路:
这道题目可以用迭代和递归,
使用迭代,那么就是类似于双指针模拟交换,设置两个变量,指向要交换的节点
使用递归的话,就是看着比较简单
代码实现:
迭代:
/**
* 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 swapPairs(ListNode head) {
// 虚拟头结点
ListNode dummyNode = new ListNode(0);
dummyNode.next = head;
ListNode prev = dummyNode;
while (prev.next != null && prev.next.next != null) {
ListNode temp = head.next.next; // 缓存 next
prev.next = head.next; // 将 prev 的 next 改为 head 的 next
head.next.next = head; // 将 head.next(prev.next) 的next,指向 head
head.next = temp; // 将head 的 next 接上缓存的temp
prev = head; // 步进1位
head = head.next; // 步进1位
}
return dummyNode.next;
}
}
参考链接:
递归小讲
https://leetcode-cn.com/problems/swap-nodes-in-pairs/
代码随想录
https://leetcode.cn/problems/swap-nodes-in-pairs/solution/liang-liang-jiao-huan-lian-biao-zhong-de-jie-di-91/