关闭

链表中环的长度(算法)

153人阅读 评论(0) 收藏 举报
分类:

给出一个单向链表,如果有环,则返回环的长度,否则返回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;
}


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:20294次
    • 积分:1102
    • 等级:
    • 排名:千里之外
    • 原创:46篇
    • 转载:7篇
    • 译文:48篇
    • 评论:1条
    文章分类
    最新评论