BM9 删除链表的倒数第n个节点
题目描述
思路分析
把两个指针想象成两个小孩,比如我们要找到倒数第3个,共10个,先让fast跑3步,此时再与slow同时开始跑,
当fast跑到10时,slow就刚好跑到8,也就是倒数第三个。
代码参考
// 可以借助之前,追击的问题,借助返回倒数第k个节点的题的基础上
function removeNthFromEnd( head , n ) {
// write code
let node = new ListNode(-1)
node.next = head
let pre = node
// 初始化fast和slow都指向head
let fast = slow = head
for(let i = 0; i < n; i++) {
if(fast===null) return null
fast = fast.next
}
// 此时让fast和slow同时跑
while(fast){
fast = fast.next
slow = slow.next
pre = pre.next
}
// 假设链表的长度足够时,那么此时slow的后面还有节点,slow是我们要删除的节点
pre.next = slow.next
slow.next = null
return node.next
}