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
}
posted @ 2022-12-29 10:27  含若飞  阅读(30)  评论(0编辑  收藏  举报