网站建设方案前言,如何在微信上建立公众号,平台推广的方法有哪些,WordPress网易云悬浮插件一起(#xffe3;︶#xffe3;)↗[GO!]
1.如何判断一个链表是否有环
思路:设定两个快慢指针fast和slow,fast每次走两个结点,slow每次走一个节点
如果fast指针遇到了Null,那么这个链表没有环,如果fast和slow可以相遇,则代表这个链表有环
代码如下 N:fast先进环,slow后…
一起(︶)↗[GO!]
1.如何判断一个链表是否有环
思路:设定两个快慢指针fast和slow,fast每次走两个结点,slow每次走一个节点
如果fast指针遇到了Null,那么这个链表没有环,如果fast和slow可以相遇,则代表这个链表有环
代码如下 N:fast先进环,slow后进环,fast和slow之间的距离是N
N---偶数---奇数 N N N-2 N-2 N-4 N-4 ... ... 4 3 2 1 0 -1 追上了 过了,进入下一个循环(fast超过slow1个结点了) C:圆环的周长 slow和fast之距变为c-1 c-1是偶数,下一轮便追上了 c-1是奇数,那么永远也追不上
2.找环的入口点 追上相遇时
1.slow所走距离:LX
2.fast所走距离:LXN*C
3.追上之后相关结论推导
2(LX) LXN*C
为何是2*slow距离fast之距离?
答:等式两边的表达式实际上是二者所走过的距离.由物理公式XVT可知,因为是同时运行,时间(循环次数)相同,所以T可以约掉,仅有2*VfastVslow;
LXN*C LN*C-X;
有 L(N-1)*CC-X;
得出重要结论:一指针从链表头开始走,
另一指针从相遇点开始走,
则牠们会在入口点相遇
3.代码 思路:1. 先判断是否有环 2.再让slow和fast相遇,以找到meet点 3.让head和meet以每循环1结点的速度同向运动,二者相遇之时便是找到入口点之时