您的位置:首页 > 编程语言 > C语言/C++

【C语言】求带环单链表的环长

2015-11-26 21:41 162 查看
思想:快慢指针,先让快指针追上慢指针,再快指针不动,慢指针单步走,两个指针再次相遇时,慢指针在第一次相遇后所单步走的步数就为环长



[align=left]intLengthCycle(Plinklist*pplist)[/align]

[align=left]{[/align]
[align=left] assert(pplist);[/align]
Node*fast
= *pplist;
Node*slow
= *pplist;

[align=left] while(fast&&fast->next) [/align]

[align=left] {[/align]
[align=left] fast = fast->next->next;[/align]
[align=left] slow = slow->next;[/align]
if(fast
== slow)
[align=left] {[/align]
[align=left] break;[/align]
[align=left] }[/align]
[align=left] }[/align]
intcount
= 0;
[align=left] do[/align]
[align=left] {[/align]
[align=left] slow = slow->next;[/align]
[align=left] count++;[/align]
}while(fast
!= slow);
[align=left] returncount;[/align]

[align=left]}[/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: