剑指offer系列29-----链表中环的入口节点-
【题目】一个链表中包含环,请找出该链表的环的入口结点。
【思路】方法一:使用双指针
方法二:利用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-----链表中环的入口节点-的更多相关文章
- 【剑指offer】删除链表中重复的节点,C++实现(链表)
0.简介 本文是牛客网<剑指offer>笔记. 1.题目 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针.例如,链表1-> ...
- 【剑指offer】单链表尾部插入一个节点
#include <iostream> using namespace std; //链表结构体 struct ListNode { int m_Value; ListNode *next ...
- 剑指offer-面试题23-链表中环的入口节点-双指针
/* 题目: 如果链表中包含环,如何找出环的入口? */ /* 思路: 双指针: 1.判断是否有环. fast指针一次2步,slow指针一次1步,当fast与slow相遇时,说明有环. 2.判断环路中 ...
- 剑指offer系列31-----二叉树的下一个节点
[题目]给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回. 注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. package com.exe7.offer; /** ...
- 剑指Offer - 两个链表第一个公共节点
https://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46?tpId=13&tqId=11189&tPage= ...
- 剑指Offer:链表中环的入口节点【23】
剑指Offer:链表中环的入口节点[23] 题目描述 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null. 题目分析 第一步确定链表中是否包含环,怎么确定呢?我们定义两个指针橙和 ...
- 【剑指offer】面试题 23. 链表中环的入口节点
面试题 23. 链表中环的入口节点
- 干货 | 剑指offer系列文章汇总
下面是名企面试中经常会出现的面试题目,大家可以戳相应的题目查看题目细节,其答案会在紧接着的后一篇中出现 剑指offer系列 始 剑指offer—灯管问题(1) 剑指offer—10人电梯(2) ...
- 剑指 Offer 24. 反转链表
剑指 Offer 24. 反转链表 Offer 24 题目描述: 常规解法 本题的解法很常规,没有其他特别的坑,只需要将链表反转即可. package com.walegarrett.offer; / ...
随机推荐
- 使用dropbox 同步任意文件夹(MAC)
使用dropbox自动同步自己mac上的文件夹: -My_Programs /Users/foreverycc/Dropbox/My_Program # . must be full absolute ...
- UVa 1388 - Graveyard
题意:有一个周长为10000的圆上等距分布着n个雕塑,现在又加入m个雕塑,位置随意,希望n+m个雕塑仍然均匀分布.这就要移动其中一些雕像,求移动的最小距离. 这个题的方法很巧妙,首先将整个圆分成(m+ ...
- KVO的简单用法
KVO,即:Key-Value Observing,它提供一种机制,当指定的对象的属性被修改后,则对象就会接受到通知.简单的说就是每次指定的被观察的对象的属性被修改后,KVO就会自动通知相应的观察者了 ...
- BIOS设置
主界面: 标准BLOS设置: 高级BLOS设置: 1.设置从光盘驱动 电脑启动时默认是从硬盘启动,但是在安装操作系统时或者是使用某些特殊软件时,可能需要从光盘.软盘或者U盘启动,这时就需要设置第一启 ...
- viewpager中对fragment的操作
XXAdatper xxAdapter = (XXAdatper)viewpager.getAdapter(); XXFragment xxFragment= (XXFragment )adapte ...
- poj3249 Test for Job ——拓扑+DP
link:http://poj.org/problem?id=3249 在拓扑排序的过程中进行状态转移,dp[i]表示从起点到 i 这个点所得到的的最大值.比如从u点到v点,dp[v]=max(dp[ ...
- HTTP详解(2)
HTTP详解(2)-请求.响应.缓存 分类: 网络知识2013-03-17 16:45 1969人阅读 评论(0) 收藏 举报 目录(?)[+] 1. HTTP请求格式 做过Socket编程的 ...
- 用自己的机器人和ubuntu PC实现通信和控制--26
原创博客:转载请表明出处:http://www.cnblogs.com/zxouxuewei/ 前提: 1.拥有一台能够采用手动或者自动移动的机器人移动平台. 2.在电机端需要安装高分辨率的霍尔编码器 ...
- 【P1203】买花
我先在已经弱到连高精乘单精都能写错的地步了QAQ 原题: 求一个小于等于N的数M,使得phi(M)/M最小,其中phi(M)是与M互质且比M小的数的个数.例如phi(4)=2,因为1,3和4互质. N ...
- VC调用系统的调色板
调用系统的调色板可以用到ChooseColor这个函数,这个函数传入一个参数为CHOOSECOLOR结构体的指针,其函数原型为 BOOL ChooseColor(LPCHOOSECOLOR lpCC) ...