剑指Offer-55.链表中环的入口结点(C++/Java)
题目:
给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。
分析:
利用快慢指针,如果链表中存在环的话,则快指针一定在环中的某个节点与慢指针相遇。
设头节点到链表的环的入口结点的结点个数为p,入口结点到两指针相遇结点的结点个数为a,相遇结点到入口结点的结点个数为b。
快指针每次走两个结点,慢指针每次走一个结点,到两指针相遇之时,访问的结点个数是两倍的关系,那么根据上面的条件我们知道。
2*(p+a) = p + a + b + a => p = b
也就是头结点到入口结点的结点数等于相遇结点到入口结点的结点个数,根据这个条件我们可以快速的求解此问题。
程序:
C++
class Solution {
public:
ListNode* EntryNodeOfLoop(ListNode* pHead)
{
if(pHead == nullptr)
return nullptr;
ListNode* fast = pHead;
ListNode* slow = pHead;
ListNode* pos = nullptr;
while(fast && slow){
fast = fast->next;
slow = slow->next;
if(fast){
fast = fast->next;
}
else
return nullptr;
if(fast == slow){
pos = slow;
break;
}
}
ListNode* start = pHead;
if(pos != nullptr){
while(pos && start){
if(pos == start)
return start;
pos = pos->next;
start = start->next;
}
}
else{
return nullptr;
}
}
};
Java
public class Solution {
public ListNode EntryNodeOfLoop(ListNode pHead)
{
if(pHead == null)
return null;
ListNode fast = pHead;
ListNode slow = pHead;
ListNode pos = null;
while(fast != null && slow != null){
fast = fast.next;
slow = slow.next;
if(fast != null)
fast = fast.next;
else{
return null;
}
if(fast == slow){
pos = slow;
break;
}
}
ListNode start = pHead;
if(pos != null){
while(start != pos){
pos = pos.next;
start = start.next;
}
return pos;
}
return null;
}
}
剑指Offer-55.链表中环的入口结点(C++/Java)的更多相关文章
- 剑指Offer 55. 链表中环的入口结点 (链表)
题目描述 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null. 题目地址 https://www.nowcoder.com/practice/253d2c59ec3e4bc68d ...
- [剑指Offer] 55.链表中环的入口结点
题目描述 一个链表中包含环,请找出该链表的环的入口结点. [思路]根据set集合的不重复,遍历链表时遇到的第一个重复结点就是环的入口结点. /* struct ListNode { int val; ...
- 【剑指Offer】链表中环的入口结点 解题报告(Python)
[剑指Offer]链表中环的入口结点 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews ...
- 【Java】 剑指offer(23) 链表中环的入口结点
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 一个链表中包含环,如何找出环的入口结点?例如,在图3.8的链表中, ...
- Go语言实现:【剑指offer】链表中环的入口结点
该题目来源于牛客网<剑指offer>专题. 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null. Go语言实现: /** * Definition for sing ...
- 剑指offer:链表中环的入口结点
题目描述: 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null. 思路分析: 这道题首先需要判断链表是否存在环,很快就能想到用快慢指针来判断. 由于快慢指针的相遇位置并不一定为链 ...
- 剑指Offer:链表中环的入口节点【23】
剑指Offer:链表中环的入口节点[23] 题目描述 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null. 题目分析 第一步确定链表中是否包含环,怎么确定呢?我们定义两个指针橙和 ...
- 剑指offer——25链表中环的入口节点
题目描述 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null. 题解: 使用快慢指针即可,若快慢指针会相遇,则有环,否则快指针先到空节点: 此时,快指针从此处一次移一步遍历, ...
- 剑指offer55:链表中环的入口结点
1 题目描述 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null. 2 思路和方法 这是一个典型的链表中查找环的问题,基本思路是,首先设置两个快慢指针slow和fast,并且快指 ...
- [剑指Offer]23-链表中环的入口节点
题目链接 https://www.nowcoder.com/practice/253d2c59ec3e4bc68da16833f79a38e4?tpId=13&tqId=11208&t ...
随机推荐
- IDEA操作MyBatis实现数据库增删改查
"感谢您阅读本篇博客!如果您觉得本文对您有所帮助或启发,请不吝点赞和分享给更多的朋友.您的支持是我持续创作的动力,也欢迎留言交流,让我们一起探讨技术,共同成长!谢谢!" 前置环境 ...
- 登录chatgpt的时候出现429的解决方法,亲测有效
登录chatgpt的时候出现429的解决方法 PS:在2023年3月14日晚还是可以用的,亲测有效 登录chatgpt的时候出现429的解决方法 很多时候在国内用代理进入chatgpt的时候会出现42 ...
- 力扣578(MySQL)-查询回答率最高的问题(中等)
题目: 从 survey_log 表中获得回答率最高的问题,survey_log 表包含这些列:id, action, question_id, answer_id, q_num, timestamp ...
- 力扣205(java)-同构字符串(简单)
题目: 给定两个字符串 s 和 t ,判断它们是否是同构的. 如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的. 每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序 ...
- TiDB Vector 抢先体验之用 TiDB 实现以图搜图
本文首发自 TiDB 社区专栏:https://tidb.net/blog/0c5672b9 前言 最早知道 TiDB 要支持向量化的消息应该是在23年10月份左右,到第一次见到 TiDB Vecto ...
- Snowflake如日中天是否代表Hadoop已死?大数据体系到底是什么?
简介: 本文作者关涛是大数据系统领域的资深专家,在微软(互联网/Azure云事业群)和阿里巴巴(阿里云)经历了大数据发展20年过程中的后15年.本文试从系统架构的角度,就大数据架构热点,每条技术线的 ...
- Paillier半同态加密:原理、高效实现方法和应用
简介: <数据安全法>已于9月1日起正式实施,两个月后<个人信息保护法>也将开始施行,意味着数据安全和隐私保护方面的监管将会在年内陆续到位.在合规收紧大背景下,"数 ...
- [GPT] 序列模型分类及其模型方案选择
序列模型可以分为两大类:线性序列模型和非线性序列模型. 线性序列模型:这类模型基于线性关系对时间序列进行建模和预测.常见的线性序列模型包括自回归模型(AR).移动平均模型(MA)和自回归移动平均模 ...
- [Trading] 日间交易中的成交量分析 - 使用成交量趋势来提高你的效果
在交易中,成交量代表在特定时期内股票或期货合约的易手单位数量. 交易员将其作为一个关键指标,因为它让他们知道资产的流动性水平,以及他们在接近当前价格的情况下买入或卖出头寸的容易程度,这可能是一个移动的 ...
- [FAQ] Error occured while trying to proxy to: xx.xx.x.xx:xx/xx
遇到这种情况,要知道证明访问并未到达指定的服务地址. 可能原因有未启动.端口占用 等等,请逐一排查. Tool:ChatAI Refer:Proxy_Error Link:https://www.cn ...