这个题也是第一次刷,但是听过之后按照船长的思路 能理解,就直接按照船长的思路,把他的代码用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 写法 跟船长的做个对比,目前也看不出来哪个好 先记录