判断一个可能包含一个环的链表的环的开始节点
来源:互联网 发布:stc单片机接数码管 编辑:程序博客网 时间:2024/05/18 03:04
题目:给定一个可能包含一个环的链表,编写一个函数,返回环开始的节点,如果该链表不包含环,则返回NULL
分析:定义两个链表指针runner和chaser,从某个位置开始,runner以两倍速度前进,chaser以一倍速度前进,如果有环,这两个指针一定会在某处相遇,相遇时,让chaser从头结点再次出发,此时,runner和chaser都以一倍速度前进,则第二次相遇的地方就是环开始的地方(可以使用数学方法证明)
参考答案:
#include "stdafx.h"
#include<iostream>
using namespace std;
struct ListNode
{
int val;
ListNode *next;
};
ListNode *findLoop(ListNode *head)
{
if(head==NULL) return NULL;
ListNode *runner=head;
ListNode *chaser=head;
while(runner!=NULL&&runner->next!=NULL)
{
runner=runner->next->next;
chaser=chaser->next;
if(runner==chaser) break;
}
if(runner==NULL||runner->next==NULL) return NULL;
chaser=head;
while(chaser!=runner)
{
chaser=chaser->next;
runner=runner->next;
}
return chaser;
}
0 0
- 判断一个可能包含一个环的链表的环的开始节点
- 寻找单链表的中间节点(可能包含环)
- 判断一个节点是不是另一个的节点的子节点;
- java中判断一个字符串是否包含另外一个字符串,如果包含,计算出字符串的开始位置
- 判断一个链表是否有环,如果有环返回环开始的结点指针
- [算法]判断一个链表是否有环及环开始的位置
- 判断一个有环链表的入口节点
- 判断链表是否有环,以及如果有环求环的长度和环开始的节点
- 给定一个可能包含重复的整数的集合,S返回所有可能的子集。
- 判断一个节点是否是另一个元素的子节点
- 求链表的节点个数 链表可能有环
- 给定一个链表,链表的每一个节点包含三个属性:1、节点值;2、指向下一个结点的引用;3、随机指向链表内任意一个节点的引用,也能不指向任何节点。复制该链表
- 随机返回一个链表的节点
- 判断一个单链表是否有环,若有,找出环的入口节点
- 链表的交叉节点:不包含环
- POJ-3441(dfs,判断环的方法一个节点被访问不超过三次)
- 判断一个单链表是否有环,若有环,求进入环中的第一个节点
- LinkedHashMap中是否包含一个Key的判断
- 封装中get和set方法的使用
- 关于Windows无法访问指定设备路径或文件,您可能没有合适的权限访问问题解决<转>
- WIN XP自动关机方法
- 一句话
- 数据结构复习 快速排序个人总结
- 判断一个可能包含一个环的链表的环的开始节点
- 【转载】java继承中的构造方法(super)
- 关于Java中继承的super()方法
- 继承中的方法重写
- Java中abstract关键字
- 不用数组的三个数比较大小
- 多态之向上、向下转型
- 简单for循环实现菱形
- VAE变分自动编码器