[24] 两两交换链表中的节点(11)

82 阅读1分钟

这个 直接开始刷 听完助教 按照他的思路 我写注释理解 能写出来, 写到这儿 感觉一般的链表反转什么的 可以更快的理解了

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;

};