题目
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例:
给定 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.