链表中环的长度(算法)

原创 2015年07月06日 17:13:58

给出一个单向链表,如果有环,则返回环的长度,否则返回0;

 观察: 首先,我们需要判断链表是否有环。使用俩指针,一快一慢,如果快指针已经到达了尾部,而且他们没有相遇,那么可以判断链表无环。如果他们相遇,那么可以确定这个结点在环上,那么再从这个结点上出发向后遍历,一定可以回到这个结点上的,因此,环的长度也知道了。


int get CircleLength(ListNode head)
{
	ListNode slow = head;
	if(slow == null || slow.next == null) return 0;
	ListNode fast = slow.next.next;
	while(fast != null && fast.next != null)
	{
		if(slow == fast ) 	return GetLength(slow);
		slow = slow.next;
		fast = fast.next.next;
	}
	return 0;
}

int GetLength(ListNode node)
{
	int length = 1;
	ListNode curr = node;
	while(curr.next != node)
	{
		length ++;
		curr = curr.next;
	}
	return length;
}


[算法练习FindLoop]判断单向链表是否存在循环/循环入口/环长度

定义两个指针; 第一个指针向前跑,另一个指针跑第一个指针跑过的,如果发现相等,则说明存在循环 我的设计是用一个变量记录第一个指针跑过的个数 然后根据这个数决定第二个指针跑几次 如果发现相等就循环...

数据结构和算法设计专题之---判断单链表中是否有环,环的长度,环的入口节点

题目: 给定一个单链表,只给出头指针head: 1、如何判断是否存在环? 2、如何知道环的长度? 3、如何找出环的连接点在哪里? 4、带环链表的长度是多少?   解法: 1、对于问...

Java算法面试题(001) 如何使用循环和递归计算单链表的长度

本文为本博主翻译,未经允许,严禁转载。 简介 这是我第一次接受跨国投资银行面试时所问的经典编程问题之一。之后,这个问题在其他编程工作面试中也多次被问到。让这个问题有趣的是,与C ++开发人员相比,...

计算单向链表的的长度,有可能有环存在

单向链表的长度定义为链表中的节点个数。如果链表中没有环则用如下算法 链表节点定义如下 struct node { int v; node *next; };算法如下 /* 返回链表的长度 链表为空...
  • nwpulei
  • nwpulei
  • 2012年10月29日 22:50
  • 4759

判断单链表中环的长度等问题

给定一个单链表,只给出头指针h: 1、判断是否存在环 选定两个指针p1,p2,初始时p1=p2=h,循环执行以下操作p1=p1+1,p2=p2+2,判断p1==p2,若p1==p2,记交点为p,则存在...

【算法之链表(一)】判断单链表中是否有环、环的长度、环的入口节点,单链表的倒数第K个节点等

题目: 给定一个单链表,只给出头指针head: 1、如何判断是否存在环? 2、如何知道环的长度? 3、如何找出环的连接点在哪里? 4、带环链表的长度是多少?   解法: 1、对于问题1,使用追赶...

如何判断链表有环并计算环的长度

给出题目:检测单链表中是否存在环。 可以遍历这个链表,遍历过的节点标记为Done,如果当目前准备遍历的节点为Done的时候,那么存在环,否则准备检测的节点为Null时,遍历完成,不存在环。 ...

判断单链表是否有环,以及如何找起始点,环的长度

来源http://blog.csdn.net/huangxy10/article/details/8014148 判断单链表是否有环? 思路: 快慢指针,快指针每次走两步,慢指针...

如何判断链表是否有环?如何计算环的长度?

1.如何判断是否有环?如果有两个头结点指针,一个走的快,一个走的慢,那么若干步以后,快的指针总会超过慢的指针一圈。 2.如何计算环的长度?第一次相遇(超一圈)时开始计数,第二次相遇时...

【郝斌数据结构自学笔记】25_判断链表是否为空和求链表长度算法的演示

25_判断链表是否为空和求链表长度算法的演示 #include #include #include   typedefstruct Node {          int data;//...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:链表中环的长度(算法)
举报原因:
原因补充:

(最多只允许输入30个字)