【问题描述】[中等]
【解答思路】
1. 递归
时间复杂度:O(N) 空间复杂度:O(N)
class Solution {
public ListNode swapPairs(ListNode head) {
if(head == null || head.next == null){
return head;
}
ListNode next = head.next;
head.next = swapPairs(next.next);
next.next = head;
return next;
}
}
2. 三指针
时间复杂度:O(N) 空间复杂度:O(N)
public ListNode swapPairs(ListNode head) {
ListNode pre = new ListNode(0);
pre.next = head;//前驱节点
ListNode temp = pre;
while(temp.next != null && temp.next.next != null) {
ListNode start = temp.next;//交换节点1
ListNode end = temp.next.next;//交换节点2
temp.next = end;
start.next = end.next;
end.next = start;
temp = start;
}
return pre.next;
}
【总结】
1. 递归关注总结
找整个递归的终止条件:递归应该在什么时候结束?
找返回值:应该给上一级返回什么信息?
本级递归应该做什么:在这一级递归中,应该完成什么任务?
2.递归是一个反复调用自身的过程,这就说明它每一级的功能都是一样的,因此我们只需要关注一级递归的解决过程即可
参考链接:https://leetcode-cn.com/problems/swap-nodes-in-pairs/solution/hua-jie-suan-fa-24-liang-liang-jiao-huan-lian-biao/
参考链接:https://leetcode-cn.com/problems/swap-nodes-in-pairs/solution/dong-hua-yan-shi-24-liang-liang-jiao-huan-lian-bia/
参考链接:https://lyl0724.github.io/2020/01/25/1/