C语言链表题,我是连思路也没有。。。

2025-03-11 08:31:32
推荐回答(2个)
回答1:

这题怎么说了,我也是想了差不多20分钟才找到一个比较好的“笨”办法。
大致给你说一下吧,分数转化为小数,你可以不停的记录余数,如果有一个余数在前面出现过,则此为循环的第二次,返回找第一次出现此余数的地方,即为循环开始的地方。
找循环头,这个其实比较简单,因为只有循环头在整个链表中存在2个指针,这样你找2个指针相同就是你的循环头指针了。这样的寻找方式应该能满足你程序对时间与空间复杂度的要求。
如果你看了还做不出来,再联系我吧。haozaiyi@163.com。希望你能自己做出来

回答2:

change比较基本,就不说了,全部用整数,模拟竖式计算,把每次除出来的余数和这次的节点记录下来,出现第一次相同的就是循环了。
find的话,是快慢指针,准备两个指针,一个一次往前走两个节点一个一次往前走一个节点,如果如果这两个指针相遇了那么就说明有循环,并且相遇的地方一定在循环的范围之内

如果再不懂怎么做,可以上网搜快慢指针……