19 删除倒数第N个节点(8)

120 阅读1分钟

这个题也是第一次刷,但是听过之后按照船长的思路 能理解,就直接按照船长的思路,把他的代码用js实现,如下

var removeNthFromEnd = function (head, n) {
	// 定一个头节点 
	// 这个是实现的方法一
	/* let ret = new ListNode(-1, head), pre = ret, cur = head;
	// 先走n步
		while (n--) {
			cur = cur.next;
		} */
	// 方法二 
	// let ret = new ListNode();
	// ret.next = head;
	let ret = new ListNode(-1, head)
	let cur = ret, pre = ret;
	/* 经过分析, 删除倒数第n个节点, 先定一个 第一个变量cur往后走n步, 
	然后从cur现在的位置开始计算,让第二个变量pre和第一个变量cur同时
	向后面走,直到链表最后,这个时候变量2pre的下一个节点就是要删除的
	倒数第n个节点 */
	// 先走n+1步
	for (let i = 0; i <= n; i++) {
		cur = cur.next;
	}

	// 同时走剩下的 ----- 方法一 和 方法二 这一步骤 以后 实现方法一样
	while (cur) {
		cur = cur.next;
		pre = pre.next;
	}
	// 删除变量2的后面一个节点
	pre.next = pre.next.next;
	return ret.next;
};

具体 理解 我也想到上面了 特别是 刚开始 定义头节点 我看了其他人的js 写法 跟船长的做个对比,目前也看不出来哪个好 先记录