(剑指offer)链表中环的入口结点【哈希集合的使用】

news/2025/1/15 15:24:24/

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

数据范围:

1≤n≤10000,
1<=结点值<=10000
1<=结点值<=10000
要求:空间复杂度
(1)
O(1),时间复杂度 O(n)
例如,输入{1,2},{3,4,5}时,对应的环形链表如下图所示:

可以看到环的入口结点的结点值为3,所以返回结点值为3的结点。
输入描述:
输入分为2段,第一段是入环前的链表部分,第二段是链表环的部分,后台会根据第二段是否为空将这两段组装成一个无环或者有环单链表
返回值描述:
返回链表的环的入口结点即可,我们后台程序会打印这个结点对应的结点值;若没有,则返回对应编程语言的空结点即可。
示例1
输入:
{1,2},{3,4,5}
复制
返回值:
3
复制
说明:
返回环形链表入口结点,我们后台程序会打印该环形链表入口结点对应的结点值,即3
示例2
输入:
{1},{}
复制
返回值:
“null”
复制
说明:
没有环,返回对应编程语言的空结点,后台程序会打印"null"
示例3
输入:
{},{2}
复制
返回值:
2
复制
说明:
环的部分只有一个结点,所以返回该环形链表入口结点,后台程序打印该结点对应的结点值,即2


/*
struct ListNode {int val;struct ListNode *next;ListNode(int x) :val(x), next(NULL) {}
};
*/
class Solution {
public:ListNode* EntryNodeOfLoop(ListNode* pHead) {unordered_set<ListNode*>st;//哈希集合ListNode* res = pHead;while(res!=nullptr){if(st.count(res)){return res;}st.insert(res);res=res->next;}return nullptr;}
};

这一题的主要解法就是利用哈希集合不能插入已有的值的特点来实现。实际上这题也可以不用哈希集合来写,不过那个方法数学思维更多。简单来说就是快慢指针来实现。如果有环,最后慢指针一定可以追上快指针。不过想知道头节点是哪个就需要一定数学证明了


http://www.ppmy.cn/news/675086.html

相关文章

关于Long的前后端传参,精度丢失问题

若后端接受格式为 List<Long> 则前端传参时不能为 int型 需要改为 &#xff0c;加上双引号

【计算机视觉】最新综述:南洋理工和上海AI Lab提出基于Transformer的视觉分割综述

文章目录 一、导读二、摘要三、内容解读3.1 研究动机3.2 这篇综述的特色&#xff0c;以及与以往的Transformer综述有什么区别&#xff1f;3.3 Transformer-Based 分割和检测方法总结与对比3.4 相关研究领域的方法总结与对比3.5 不同方法的实验结果对比3.6 未来可以进行的方向 一…

java中对数据进行脱敏操作(证件号,手机号,移动电话,邮箱)

**敏感信息处理包括&#xff1a; /*要考虑到证件号是否为身份证号或者学生证&#xff0c;因为数字位数不同全部按身份证的方式托面&#xff0c;第三位至最后四位都进行脱敏操作*/1.证件号非空时第3位到第14位显示时以*号代替2.移动电话非空时第2位-第7位显示时以*号代替3.手机号…

手机号证件号正则

var myreg /^[1][3,4,5,7,8][0-9]{9}$/; myreg.test(this.input) 手机号正则 var reg /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/reg.test(str);

JAVA将证件号打星号

/*** 证件打星号(*)* * param id 身份证* return String*/public static String idAsterisk(String id) {try {//身份证不为空if (StringUtil.isNotEmpty(id) && id.length() > 18) {id id.replace(id.substring(6, 14), "********");}} catch (Exceptio…

证件类型与证件号码前端验证

身份证、回乡证、台胞证验证 // 证件类型、证件号码验证idNumberCheck(strType, strNum) {// 身份证 最后一位X需要大写var idCard /^(^\d{18}$|^\d{17}(\d|X))$///港澳通行证验证、回乡证var hgIdCrad /^[HM]{1}([0-9]{10}|[0-9]{8})$///台胞证验证var tbIdCrad /(^\d{8})…

姓名、手机号、证件号掩码

public static void main(String[] args) {String fullName "王五一一";String name StringUtils.left(fullName, 1);String s StringUtils.rightPad(name, StringUtils.length(fullName), "*");System.out.println(s);String idno "110110202102…

证件号通用脱敏、名称脱敏

证件号通用脱敏 function privacyCardNo (val) {if (!val || typeof val ! string || val null || val undefined || val.length < 6) return vallet cnl val.length < 11 ? 4 : val.length > 15 ? 8 : 6let at Math.floor((val.length - cnl) / 2)let strStar…