news 2026/10/1 16:18:24

链表(3)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
链表(3)

一、链表中环的入口结点

给一个长度为n链表,若其中包含环,请找出该链表的环的入口结点,否则,返回null。

数据范围: n≤10000,1<=结点值<=10000

要求:空间复杂度 O(1),时间复杂度 O(n)

import java.util.*; /* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } } */ public class Solution { public ListNode EntryNodeOfLoop(ListNode pHead) { // 快、慢指针 // 假设有环,二者终会相遇 // 在相遇点,让其中一个回到起点,随后二者以相同的步伐走(每次走一步,最终二者将在环的入口节点相遇) ListNode fast, slow; fast = slow = pHead; while (fast != null && fast.next != null) { fast = fast.next.next; slow = slow.next; if (fast == slow) { fast = pHead; while (fast != slow) { fast = fast.next; slow = slow.next; } return fast; } } return null; } }

运行结果

二、链表中倒数最后k个结点

输入一个长度为 n 的链表,设链表中的元素的值为,返回该链表中倒数第k个节点。

如果该链表长度小于k,请返回一个长度为 0 的链表。

数据范围:0≤n≤105,0≤≤109,0≤k≤109

要求:空间复杂度 O(n),时间复杂度 O(n)

进阶:空间复杂度 O(1),时间复杂度 O(n)

import java.util.*; /* * public class ListNode { * int val; * ListNode next = null; * public ListNode(int val) { * this.val = val; * } * } */ public class Solution { public ListNode FindKthToTail (ListNode pHead, int k) { // 换个角度,倒数第 k 个节点可以转换成该节点到末尾 null 的距离(即往后走几步到达 null,这个几就是 k) // 所以不妨设置两个指针 p1、p2。先让 p1 往前走 k 步,这是为了让 p1 和 p2 保持恒定的间距 k。 // 随后 p1、p2 同步走,一次走一步。 // 当 p1 先走到 null 时,p2 所指向的节点即为倒数第 k 个节点 ListNode p1, p2; p1 = p2 = pHead; // p1 先走 k 步 for (int i = 0; i < k; i++) { if (p1 == null && i < k) { // 链表长度小于 k 时,p1 会在未走满 k 步前提前走到 null return null; } p1 = p1.next; } // p1、p2 同步走 while (p1 != null) { p1 = p1.next; p2 = p2.next; } return p2; } }

运行结果

三、删除链表的倒数第n个节点

给定一个链表,删除链表的倒数第n个节点并返回链表的头指针
例如,给出的链表为: 1→2→3→4→5, n=2.
删除了链表的倒数第 nn个节点之后,链表变为1→2→3→5.

数据范围: 链表长度 0≤n≤1000,链表中任意节点的值满足 0≤val≤100

要求:空间复杂度 O(1),时间复杂度 O(n)

import java.util.*; /* * public class ListNode { * int val; * ListNode next = null; * public ListNode(int val) { * this.val = val; * } * } */ public class Solution { public ListNode removeNthFromEnd (ListNode head, int n) { ListNode dummy = new ListNode(-1); dummy.next = head; // 还是同样的 p1, p2 // 只不过 p2 要寻找的目标是倒数第 n 个节点的前驱节点 // 现在 p1 的起点是 head,p2 的起点是 dummy // 题目保证 n 是有效的 ListNode p1 = head, p2 = dummy; // p1 先走 n 步 for (int i = 0; i < n; i++) { p1 = p1.next; } // p1、p2 一起走 while (p1 != null) { p1 = p1.next; p2 = p2.next; } // 此时 p2 是倒数第 n 个节点的前驱节点 p2.next = p2.next.next; return dummy.next; } }

运行结果

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/1 16:17:10

昆工人工智能多少分才稳?拟录取61人分数全拆:平均293.5,末位254

昆工人工智能多少分才稳&#xff1f;拟录取61人分数全拆&#xff1a;平均293.5&#xff0c;末位254 考人工智能的同学最纠结的就是定目标分数。网上有人说过了国家线就行&#xff0c;也有人说要三百大几&#xff0c;越看越乱。这次我直接把昆工2026届人工智能一志愿录取的61个人…

作者头像 李华
网站建设 2026/10/1 16:16:56

深圳龙华400万新房上车靠谱商家测评排名,金地启曜府客户口碑力荐

深圳龙华400万预算的新房市场&#xff0c;正处在需求集中释放的阶段。对于计划在这个预算段上车的家庭而言&#xff0c;真正的问题不是没有房子可选&#xff0c;而是如何在众多楼盘与信息中判断哪些选择足够安全、足够可靠。深圳市亿年投资有限公司长期关注龙华中心板块的置业需…

作者头像 李华
网站建设 2026/10/1 16:16:56

北京防火玻璃标准与政策培训服务机构筛选名录:省心不踩坑优选

消防验收关口前移&#xff1a;北京防火玻璃合规选型的实用指南在建筑室内装饰装修领域&#xff0c;防火玻璃作为消防分隔系统的核心组件&#xff0c;其合规性直接关系到项目消防验收通过率与后期消防安全。不少项目因防火玻璃选型不当、资质不全&#xff0c;不仅延误工期&#…

作者头像 李华
网站建设 2026/10/1 16:16:46

阜阳AI内容创作实战:短剧、漫剧、婚礼视频从零到稳定产出

1. 从阜阳本地视角看AI内容创作的真实机会这两年我在阜阳做AI培训&#xff0c;接触了不少本地做短视频、婚庆、广告的团队&#xff0c;发现一个很明显的现象&#xff1a;大家嘴上都在聊AI&#xff0c;但真正能把它变成稳定产出的人少之又少。大部分人卡在三个地方——不知道用什…

作者头像 李华
网站建设 2026/10/1 16:16:38

LabVIEW 2018 安装教程:环境准备、授权激活与报错排查

1. 为什么到了今天还有人在装 LabVIEW 2018先说个现象。你如果去问一圈做测控、产线自动化、高校实验平台的朋友&#xff0c;会发现 LabVIEW 2018 这个版本的生命力远超它自己的发布周期。NIPM 里早就有 2020、2021、2023、2024 了&#xff0c;可很多工厂的老设备上位机还跑在 …

作者头像 李华