链表是否有环
7<-6
(向下)v ^(向上)
1->2->3->4->5
如何判断链表是否有环,可以通过快慢指针的方式,比如 快一次走俩格,慢指针一次走一格,当存在环时,快慢指针最终会在环里相遇。
; { ( ) { ; ; ( .){ (. .){ ; } .; ..; } ; } { ; ; ( ) { . ; } } ([] ) { (); (); (); (); (); .; .; .; .; .; ..(()); } }
链表的环长是多少
如何计算环的长度,从快慢指针相遇开始,到下次相遇,他俩的速度差*前进的次数就是环长
; { ( ) { ; ; ; .; ( . ) { (. . .) { ; } (. . ) { .; } (.){ ; } .; ..; } ; } { ; ; ( ) { . ; } } ([] ) { (); (); (); (); (); . ; . ; . ; . ; . ; ..(()); } }
链表环的入口结点
如果一个链表分为 入环长度 D,环内相遇点,慢指针走的长s1,快指针走的长s2,本题快指针速度是慢指针2倍,所以有公式2(d+s1) = d+s1+n(s1+s2) d=(n-1)(s1+s2)
无代码
以上时环形链表可能会遇到的三个典型问题,主要考察的是链表遍历以及对环的理解,至于其他链表操作,比如倒序遍历,双链比较排序等