首先,我们把每两个作为一组,将后面的看作为一个整体
然后进行交换,每一组的前一个指向下一组交换后的头结点
即执行递归:head.next = swapPairs(newHead.next).
然后将第二个newHead结点指向第一个head结点即可
递归的结束条件:下一组结点为0个或者一个,不用交换了。然后就可以将第二个结点执行第一个结点,完成交换。
/**
* 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) {
//终止条件
if (head == null || head.next == null) {
return head;
}
//记录第二个结点,每两个结点为一组
ListNode newHead = head.next;
//前一组的头结点指向下一组
head.next = swapPairs(newHead.next);
//结束递归,让每一组第二个结点指向头结点
newHead.next = head;
return newHead;
}
}