题目

给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。

你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

示例:

给定 1->2->3->4, 你应该返回 2->1->4->3.

题解

我使用的递归方法,1和2,3和4交换,那么我们可以确定递归对象为2n,终止条件为2n和2n+1任一为空;我们在递归函数里要做的是就是节点交换,思路就是这样了;

代码

/**
 * Definition for singly-linked list.
 * function ListNode(val, next) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.next = (next===undefined ? null : next)
 * }
 */
/**
 * @param {ListNode} head
 * @return {ListNode}
 */
var swapPairs = function(head) {
    // 如果2n 和 2n+1 任一为空
    if(!head || !head.next) {
        return head
    }
    // 定义新节点
    let newHead = head.next;
    // 递归2n+1个元素
    head.next = swapPairs(newHead.next);
    // 交换链表
    newHead.next = head;
    return newHead;
};

Q.E.D.