LeetCode刷题菜鸟,理解起来都废了点时间。
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
输入:head = [1, 2, 3, 4]
输出:[2, 1, 4, 3]
示例 2:
输入:head = [ ]
输出:[ ]
示例 3:
输入:head = [1]
输出:[1 ]
解题步骤
初始时,cur指向虚拟头结点,然后进行如下三步:
操作之后,链表如下:
看这个可能就更直观一些了:
对应的JavaScript代码:
/**
* 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) {
let ret = new ListNode(0, head), temp=ret;
while(temp.next && temp.next.next){
let cur = temp.next.next, pre=temp.next;
pre.next=cur.next;
cur.next=pre;
temp.next=cur;
temp=pre;
}
return ret.next;
};
开始画图花了几次没懂,就是没弄清指针的问题: