欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 高考 > 算法1(蓝桥杯18)-删除链表的倒数第 N 个节点

算法1(蓝桥杯18)-删除链表的倒数第 N 个节点

2025/11/10 8:54:39 来源:https://blog.csdn.net/2301_76648183/article/details/144384481  浏览:    关键词:算法1(蓝桥杯18)-删除链表的倒数第 N 个节点

问题:

 给你一个链表,删除链表的倒数第 n 个节点,并且返回链表的头节点。

输入:head = 1 -> 2 -> 3 -> 4 -> 5 -> null, n = 2
输出:1 -> 2 -> 3 -> 5 -> null
输入:head = 1 -> null, n = 1
输出:null
输入:head = 1 -> 2 -> null, n = 1
输出:1 -> null

解题思路:

使用快慢指针

(1)创建虚拟节点,简化边界条件的处理(这里虚拟节点的值不重要)

        

(2)创建快慢指针,指向虚拟节点

        

(3)使用循环让快指针先移动n步(假设删除倒数第2个节点)

        

(4)通过循环条件快指针的下一位不为空,使慢指针位于到被删除节点的前一个位置

(5)删除节点

        

完整代码:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>删除链表的倒数第 N 个节点</title>
</head>
<body><p>给你一个链表,删除链表的倒数第 n 个节点,并且返回链表的头节点。</p><p>输入:head = 1 -> 2 -> 3 -> 4 -> 5 -> null, n = 2输出:1 -> 2 -> 3 -> 5 -> null</p>
</body>
<script>class LinkList {constructor(val,next){this.val=valthis.next=next}}let head = new LinkList(1)head.next = new LinkList(2)head.next.next = new LinkList(3)head.next.next.next = new LinkList(4)head.next.next.next.next = new LinkList(5)removeNthFromEnd(head,2)function removeNthFromEnd(head, n) {let node = {val: 0,next: head}let f = s = node while (n-- > 0) {f = f.next}while (f != null && f.next != null) {f = f.nexts = s.next}s.next = s.next.next console.log(node.next);return node.next}</script>
</html>

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词