思路
采用递归的方式进行求解。
先找递归终止的条件:没有交换的时候就递归终止,即当链表只剩一个节点或者没有节点的时候。
找返回值:因为是两两交换,所以递归的每一层返回的都是已经交换完成的链表。
每层递归要做的事情:每一层可以保存两个节点和,我们要做的事就是交换它两的位置:,那么为了让每一次递归返回的链表连接起来,那么还需要做的是: 上一次递归返回的结果。
具体执行过程如下
代码
package leetcode.problem24;
import leetcode.ListNode;
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;
}
}