判断单链表是否有环,环的入口环中节点数

一、判断单链表是否有环

定义两个指针,同时从链表的头节点出发,一个指针一次走一步,另一个指针一次走两步。如果走得快的指针追上了走得慢的指针,那么链表就是环形链表;如果走得快的指针走到了链表的末尾(next指向 NULL)都没有追上第一个指针,那么链表就不是环形链表。

二、若单链表有环,如何找出环的入口节点。 
步骤: 
<1> 定义两个指针p1和p2,在初始化时都指向链表的头节点。 
<2> 如果链表中的环有n个节点,指针p1先在链表上向前移动n步。 
<3> 然后指针p1和p2以相同的速度在链表上向前移动直到它们相遇。 
<4> 它们相遇的节点就是环的入口节点。 
那么如何得到环中的节点数目?

可使用上述方法(1),即通过一快一慢两个指针来解决这个问题。当两个指针相遇时,表明链表中存在环。两个指针相遇的节点一定是在环中。可以从这个节点出发,一边继续向前移动一边计数,当再次回到这个节点时,即可得到环中的节点数了。

猜你喜欢

转载自www.cnblogs.com/xiao-longxia/p/12616367.html
今日推荐