c_cpp 检测链表中循环或循环的起始节点

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 检测链表中循环或循环的起始节点相关的知识,希望对你有一定的参考价值。

node* find_loop_start(node *head) {
    	if(!head || !head->next) return NULL;
	node *slow = head, *fast = head;
	while(slow && fast && fast->next) {
		slow = slow->next;
		fast = fast->next->next;
		if(slow == fast) break;
	}
	if(fast->next == NULL)  // no loop, 4/30/2014, add this check for early return if no loop.
		return NULL;
	fast = head;
	while(fast != slow) {
		fast = fast->next;
		slow = slow->next;
	}
	return fast;
}

以上是关于c_cpp 检测链表中循环或循环的起始节点的主要内容,如果未能解决你的问题,请参考以下文章

c_cpp 检测链表中的循环

如何检测链表中的循环?

如何在循环链表中查找循环起始节点?

c_cpp 在链表中查找循环的长度

面试:删除链表中的循环 - Java

使用 Hare and Tortoise 方法在链表中检测循环