我们采用的递归的方法:
我们递归处理的元素以两两为一组。每当指针移动到一组中第二个元素,就会递归进入下一组
EG:1->2->3->4,以这四个元素为例子
如此递归到最深处时候,组别是3->4,此时right是4,right的next进入递归会返回null,我们这时候
交换3,4的顺序
把4.next = 3;把3.next = 递归返回的值
如此循环往复。
public ListNode swapPairs(ListNode head) {
//递归出口
if(head == null || head.next == null){
return head;
}
//递归入口
ListNode right = head.next;
ListNode node = swapPairs(right.next);
//执行递归完的步骤
right.next = head;
head.next = node;
return right;
}
时间复杂度:O(n),其中 n 是链表的节点数量。需要对每个节点进行更新指针的操作。
空间复杂度:O(n),其中 n 是链表的节点数量。空间复杂度主要取决于递归调用的栈空间。