这个 直接开始刷 听完助教 按照他的思路 我写注释理解 能写出来, 写到这儿 感觉一般的链表反转什么的 可以更快的理解了
var swapPairs = function (head) {
if (!head) return null;
// 创建头部节点ret 并把头部节点ret赋值给pre
let ret = new ListNode(-1, head), pre = ret;
// 判断 后面有2位开始反转
while (pre.next && pre.next.next) {
// 这里第一次循环 相当于 把第一个节点1复制给你cur1 第二个2复制给你cur2
let cur1 = pre.next, cur2 = pre.next.next;
// 第一步 把第三个节点 连在cur1的后面 (相当于1->3)
/* cur1.next = cur2.next;
// 第二步 把2->1
cur2.next = cur1;
// 第三部 把 pre0->的前面 -- 到这一步 相当于头节点0->2->1->3 已经完成前两个反转
pre.next = cur2;
// 第四 把1给头节点pre 因为现在1相当于的个节点 整个链表来说相当于3,4的头节点
pre = cur1 */
// 结构复制 简化上面4个步骤
[cur1.next, cur2.next, pre.next, pre] = [cur2.next, cur1, cur2, cur1]
}
return ret.next;
};