两两交换链表中的节点

思路

采用递归的方式进行求解。

先找递归终止的条件:没有交换的时候就递归终止,即当链表只剩一个节点或者没有节点的时候。

找返回值:因为是两两交换,所以递归的每一层返回的都是已经交换完成的链表。

每层递归要做的事情:每一层可以保存两个节点两两交换链表中的节点两两交换链表中的节点,我们要做的事就是交换它两的位置:两两交换链表中的节点,那么为了让每一次递归返回的链表连接起来,那么还需要做的是:两两交换链表中的节点 上一次递归返回的结果。

具体执行过程如下

两两交换链表中的节点

代码

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;
    }
}

 

相关文章: