Java for You 数据结构 删除链表的倒数第 N 个结点 | LeetCode 19

删除链表的倒数第 N 个结点 | LeetCode 19

题目描述

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

​

示例 1:

image.png

示例 2:

示例 3:

​

提示:

  • 链表中结点的数目为 sz
  • 1 <= sz <= 30
  • 0 <= Node.val <= 100
  • 1 <= n <= sz

​

题目解析

要删除倒数第 n 个节点,就得获得倒数第 n + 1 个节点的引用。

​

获取单链表的倒数第 k 个节点,就是想考察 双指针技巧 中快慢指针的运用,一般都会要求你只遍历一次链表,就算出倒数第 k 个节点。

  • 第一步,我们先让一个指针 p1 指向链表的头节点 head,然后走 k 步
  • 第二步,用一个指针 p2 指向链表头节点 head:
  • 第三步,让 p1 和 p2 同时向前走,p1 走到链表末尾的空指针时走了 n – k 步,p2 也走了 n – k 步,也就是链表的倒数第 k 个节点:

​

这样,只遍历了一次链表,就获得了倒数第 k 个节点 p2。

​

解法中在链表头部接一个虚拟节点 dummy 是为了避免删除倒数第一个元素时出现空指针异常,在头部加入 dummy 节点并不影响尾部倒数第 k 个元素是什么。

参考代码

以下为 Java 代码。

​

​

复杂度分析

​

  • 时间复杂度:O(L),其中 L 是链表的长度。
  • 空间复杂度:O(1)。

本文由 java4u.cn 发布,可自由转载、引用,但需署名作者且注明文章出处(作者:白色蜗牛,出处:java4u.cn)。如转载至微信公众号,请在文末添加作者公众号二维码。 https://java4u.cn/algorithms/3306.html

作者: 蜗牛

链表的中间结点 | LeetCode 876

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

联系我们

公众号:蜗牛互联网

在线咨询: QQ交谈

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部