【题目】一个链表中包含环,请找出该链表的环的入口结点。

【思路】方法一:使用双指针

   方法二:利用set集合的特性,不能添加重复数字,否则返回false
 package com.exe7.offer;

 /**
* 【题目】一个链表中包含环,请找出该链表的环的入口结点。
* @author WGS
*
*/
public class EntryNodeOfLoop { class LinkNode{
int val;
LinkNode next=null;
public LinkNode(int val){
this.val=val;
}
}
//得到闭环中任一相遇结点
public LinkNode getMeetingNode(LinkNode headNode){
if(headNode==null) return null;
LinkNode slowNode=headNode;
LinkNode fastNode=slowNode.next; while(slowNode!=null && fastNode!=null){
if(slowNode==fastNode)
return fastNode;
slowNode=slowNode.next;
fastNode=fastNode.next;
if(fastNode!=null)
fastNode=fastNode.next;
}
return null; }
public LinkNode getNodeOfLoop(LinkNode headNode){
if(headNode==null) return null; LinkNode meetingNode=getMeetingNode(headNode);
if(meetingNode==null)
return null;
//1 首先根据得到的闭环中得到的结点确定闭环中结点的总共数目
int numOfLoop=1;
LinkNode pNode1=meetingNode.next;
while(pNode1!=meetingNode){
pNode1=pNode1.next;
numOfLoop++;//得到闭环节点数目
} //2 根据双指针确定入环结点
pNode1=headNode;
for(int i=0;i<numOfLoop;i++){
pNode1=pNode1.next;
}
LinkNode pNode2=headNode;
while(pNode1!=pNode2){
pNode1=pNode1.next;
pNode2=pNode2.next;
}
return pNode1; }
public static void main(String[] args) {
// TODO Auto-generated method stub } }
 /**
* 方法二:利用set集合的特性,不能添加重复数字,否则返回false
* @param args
*/
public LinkNode EntryNodeOfLoop(LinkNode headNode){
Set<LinkNode> set=new HashSet<>();
while(headNode!=null && set.add(headNode)){
headNode=headNode.next;
} return headNode; }

剑指offer系列29-----链表中环的入口节点-的更多相关文章

  1. 【剑指offer】删除链表中重复的节点,C++实现(链表)

    0.简介       本文是牛客网<剑指offer>笔记. 1.题目 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针.例如,链表1-> ...

  2. 【剑指offer】单链表尾部插入一个节点

    #include <iostream> using namespace std; //链表结构体 struct ListNode { int m_Value; ListNode *next ...

  3. 剑指offer-面试题23-链表中环的入口节点-双指针

    /* 题目: 如果链表中包含环,如何找出环的入口? */ /* 思路: 双指针: 1.判断是否有环. fast指针一次2步,slow指针一次1步,当fast与slow相遇时,说明有环. 2.判断环路中 ...

  4. 剑指offer系列31-----二叉树的下一个节点

    [题目]给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回. 注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. package com.exe7.offer; /** ...

  5. 剑指Offer - 两个链表第一个公共节点

    https://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46?tpId=13&tqId=11189&tPage= ...

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

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

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

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

  8. 干货 | 剑指offer系列文章汇总

    下面是名企面试中经常会出现的面试题目,大家可以戳相应的题目查看题目细节,其答案会在紧接着的后一篇中出现  剑指offer系列  始 剑指offer—灯管问题(1)  剑指offer—10人电梯(2)  ...

  9. 剑指 Offer 24. 反转链表

    剑指 Offer 24. 反转链表 Offer 24 题目描述: 常规解法 本题的解法很常规,没有其他特别的坑,只需要将链表反转即可. package com.walegarrett.offer; / ...

随机推荐

  1. DISCOVAR de novo

    海宝建议用这个拼接软件 http://www.broadinstitute.org/software/discovar/blog/?page_id=98 DISCOVAR – variant call ...

  2. Python 新手常犯错误(第一部分)

    转载自:http://blog.jobbole.com/42706/ 在之前几个月里,我教一些不了解Python的孩子来慢慢熟悉这门语言.渐渐地,我发现了一些几乎所有Python初学者都会犯的错误,所 ...

  3. map的相关

    private static final Map<String, String> flagMap = new HashMap<String, String>(); static ...

  4. js刷新当前页面

    a href="javascript:window.location.href=location.href"

  5. 创建kafkatopic和productor

    cd 到kafka 目录下 创建topic create topicbin/kafka-topics.sh --zookeeper spark1:2181,spark2:2181,spark3:218 ...

  6. react 不能往组件中传入属性的值为 undefined

    在使用 andt design 的时候遇到个需求,需要清除 Select 组件选中后的值,让它变成什么都没选中,显示 placeholder 刚开始以为设置为 null 即可,结果发现设置为 null ...

  7. 在IE地址栏输入JS的有趣效果

    1.编辑网页 在地址栏输入下面的代码按enter,网页上所有元素都能变成可编辑状态,你可以移动.调整元素大小.如果你只是讨厌某个网站想发泄一下,我建议你使用NetDisater. 代码如下: java ...

  8. java基础之:匿名内部类

    在java提高篇-----详解内部类中对匿名内部类做了一个简单的介绍,但是内部类还存在很多其他细节问题,所以就衍生出这篇博客.在这篇博客中你可以 了解到匿名内部类的使用.匿名内部类要注意的事项.如何初 ...

  9. Vi个人学习使用心得

    找句首/句末 光标所在行:句首: shift+^; 句末: shift +$; 括号匹配:光标在某一括号上,然后shift+% 快速对齐 针对括号的内容:将括号中的内容全部选中之后(按V后, shif ...

  10. Improve Scalability With New Thread Pool APIs

    Pooled Threads Improve Scalability With New Thread Pool APIs Robert Saccone Portions of this article ...