题目链接

https://www.nowcoder.com/practice/253d2c59ec3e4bc68da16833f79a38e4?tpId=13&tqId=11208&tPage=3&rp=3&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

题意

给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。

解题思路

入口节点即遍历过程第一个再次到达的节点。

  • 第一步:确定链表中包含环

    方法:两个指针同时从头节点出发,一个每次一步,一个每次两步。如果走的快的指针追上了走的慢的,说明有环。如果走的快的指针走到了链表尾,那么说明没环。
  • 第二步:找到环中的节点数

    方法:因为上述两个节点相遇的节点一定在环中,所以从这个节点出发,再次走到这个节点,即可计算出环中的节点数。
  • 第三步:找到链表中环的入口节点

    方法:两个指针从链表头节点出发,一个先走环的节点数步,然后两个指针同时往前走,两个指针相遇的节点即是环的入口节点。

    总结:

    三步的方法都很666,要多品读。

代码

class Solution {
public:
ListNode* EntryNodeOfLoop(ListNode* pHead)
{
if(!pHead){
return nullptr;
} //找一个环中节点
ListNode *pSlow=pHead->next;//注意
if(!pSlow){
return nullptr;
}
ListNode *pFast=pSlow->next;
while((pFast->next)->next&&pFast->next&&pFast!=pSlow ){//注意
pFast=(pFast->next)->next;
pSlow=pSlow->next;
}
if(!(pFast->next)->next||!(pFast->next)){
return nullptr;
} //计算环中节点数
pFast=pFast->next;
int cirCleNodeCnt=1;
while(pFast!=pSlow){
pFast=pFast->next;
++cirCleNodeCnt;
} //找环入口点
pFast=pHead;
pSlow=pHead;
while(cirCleNodeCnt--){
pFast=pFast->next;
}
while(pFast!=pSlow){
pFast=pFast->next;
pSlow=pSlow->next;
}
return pFast;
}
};

[剑指Offer]23-链表中环的入口节点的更多相关文章

  1. 剑指Offer:链表中环的入口节点【23】

    剑指Offer:链表中环的入口节点[23] 题目描述 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null. 题目分析 第一步确定链表中是否包含环,怎么确定呢?我们定义两个指针橙和 ...

  2. 【Java】 剑指offer(23) 链表中环的入口结点

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 一个链表中包含环,如何找出环的入口结点?例如,在图3.8的链表中, ...

  3. 剑指offer——25链表中环的入口节点

    题目描述 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null.   题解: 使用快慢指针即可,若快慢指针会相遇,则有环,否则快指针先到空节点: 此时,快指针从此处一次移一步遍历, ...

  4. 【剑指Offer】链表中环的入口结点 解题报告(Python)

    [剑指Offer]链表中环的入口结点 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews ...

  5. Go语言实现:【剑指offer】链表中环的入口结点

    ​该题目来源于牛客网<剑指offer>专题. 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null. Go语言实现: /** * Definition for sing ...

  6. 剑指offer:链表中环的入口结点

    题目描述: 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null. 思路分析: 这道题首先需要判断链表是否存在环,很快就能想到用快慢指针来判断. 由于快慢指针的相遇位置并不一定为链 ...

  7. 剑指Offer 55. 链表中环的入口结点 (链表)

    题目描述 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null. 题目地址 https://www.nowcoder.com/practice/253d2c59ec3e4bc68d ...

  8. [剑指Offer] 55.链表中环的入口结点

    题目描述 一个链表中包含环,请找出该链表的环的入口结点. [思路]根据set集合的不重复,遍历链表时遇到的第一个重复结点就是环的入口结点. /* struct ListNode { int val; ...

  9. 【剑指offer】面试题 23. 链表中环的入口节点

    面试题 23. 链表中环的入口节点

随机推荐

  1. Mp4 to Img

    # -*- coding: utf-8 -*- """ Created on Thu May 3 16:51:50 2018 """ # 录 ...

  2. 盒子变形-盒子加padding后 变形问题,

    1. box-sizing: content-box: 影响: 加了内外边距后整个盒子的大小同步改变 2.box-sizing: border-box;影响:加了边距后整个盒子大小不受影响 boots ...

  3. Eclipse优化常用方法

    Eclipse优化常用方法如下: 1.减少不必要的验证 将Manual保持不动,build里面只留下classpath dependency Validator,其他的全部去掉.如果以后需要对文件进行 ...

  4. 对于两个初始时设置为Sensor的刚体,不会触发preSolve和postSolve

    Main.as package{ import Box2D.Common.Math.b2Vec2; import Box2D.Dynamics.b2Body; import Box2D.Dynamic ...

  5. SSL和TLS协议的区别

    SSL:(Secure Socket Layer,安全套接字层),位于可靠的面向连接的网络层协议和应用层协议之间的一种协议层.SSL通过互相认证.使用数字签名确保完整性.使用加密确保私密性,以实现客户 ...

  6. 如何使用JDBC查询指定的记录

    //连接数据库 public class JdbcDao {    private Connection conn=null;    private String strSql=null; publi ...

  7. django使用restframework实现安全的api

    参考地址:https://github.com/tomchristie/django-rest-framework/ 一般如果在批量修改多的时候,不建议使用,一般在get请求,或者修改单条数据的时候使 ...

  8. 关于三层(dao,serviece,servlet)

    在登陆校验中, dao:返回的是resultset 对象,就是  ps.executeQuery(需要强化的是jdbc的具体的流程) 其中的数据库连接时可以自己写 可以通过工厂类 可以通过数据库的连接 ...

  9. XML 可扩展标记语言

    因 为XML实在是太重要了,而且被广泛应用!不论是数据存储,还是其他方面,如配置文件等.XML是一种对独立于任何编程语言的数据进行编码的机制.在数据 交换领域,正在变得非常流行!因为他的基于节点的存储 ...

  10. 移动端引用echarts的折线图

          移动端写一个图表引用echarts,highcharts插件,本次要找一个能够显示最新数据的折线图,最后只找到显示最大值: 找到echarts的实例:记一下个各功能.   <!DOC ...