AXin说算法:如何判断链表有环?
Posted xietx1995
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AXin说算法:如何判断链表有环?相关的知识,希望对你有一定的参考价值。
面试官:你来说说怎么判断链表有环?
AXin:什…什么是链表有环?
面试官:环都不知奥?喝乌俺~huan,环,就是下面这个样子,只会出现情况1和情况2,不会出现情况3这种。而且环有且只有一个,一定包含最后一个节点。(PS:情况3已经是有向图了,不是链表)
AXin:我…我想一想。
面试官:别墨迹了,你就说你会不会吧?
【30分钟后…】
AXin:我想到了!
面试官:快说!我两把王者都打完了!
AXin:好嘞!用两个指针,指针A一次向前走一步,指针B一次向前走两步,如果指针A和指针B能够相遇,说明链表中有环。
面试官:算你聪明,解释解释怎么个走法。
AXin:我拿张纸划给你看,你就知道了。
【片刻之后…】
AXin:当当当当!看图!
面试官:不错!有那味儿了。图画得挺好!你懂美术?
AXin:略懂~ 略懂~
面试官:光画图没用,你给我把代码写出来!
AXin:好!
【片刻之后】
AXin:请您过目!
/**
* Definition for singly-linked list.
* struct ListNode
* int val;
* struct ListNode *next;
* ;
*/
bool hasCycle(struct ListNode *head)
if(NULL == head)
return false;
struct ListNode *fast = head;
struct ListNode *slow = head;
// 注意fast->next可能为空指针
while(slow && fast && fast->next)
slow = slow->next;
fast = fast->next->next;
if(slow == fast)
return true;
return false;
面试官:好!明天来上班!
此种方法使用了两个指针,一个走得快,一个走得慢,称为“快慢指针”法。除了判断链表中是否有环,还可以解决其他类似的问题,例如:找出单链表中倒数第K个元素。可以思考一下怎么解决。
以上是关于AXin说算法:如何判断链表有环?的主要内容,如果未能解决你的问题,请参考以下文章