介绍
本篇文章为大家展示了利用PHP怎么找出链表中环的入口节点,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
<强>解决思路强>
第一步,找环中相汇点。分别用p1, p2指向链表头部,p1每次走一步,p2每次走二步,直到p1==p2找到在环中的相汇点。
第二步,找环的入口。接上步,当p1==p2时,p2所经过节点数为2 x, p1所经过节点数为x,设环中有n个节点,p2比p1多走一圈有2 x=n + x;n=x;可以看出p1实际走了一个环的步数,再让p2指向链表头部,p1位置不变,p1, p2每次走一步直到p1==p2;此时p1指向环的入口。(还没怎么懂)
<强>实现代码强>
& lt; php ?/* class ListNode { var 才能,val美元; var 才能;next 美元;=,空; function 才能__construct ($ x) { ,,,这个→美元val =, $ x; ,,} }*/function EntryNodeOfLoop (pHead美元) { 如果才能(pHead 美元==,null | |,美元pHead→next ==, null) ,,,return 零; 时间=美元才能p1 pHead美元; 时间=美元才能p2 pHead美元; 而才能(p2美元!=null ,,, p2→美元未来!=null) { ,,,p1 美元;=,p1→美元未来; p2 美元,,,,=,美元p2→下一步→下; ,,,如果美元($ p1 ==, p2) { ,,,,,p2 美元;=,pHead美元; ,,,,,,(p1美元!=$ p2) { ,,,,,,,p1 美元;=,p1→美元未来; ,,,,,,,p2 美元;=,p2→美元未来; ,,,,,} ,,,,,如果美元($ p1 ==, p2) ,,,,,,,return p1美元; ,,,} ,,} return 才能;零; }
上述内容就是利用PHP怎么找出链表中环的入口节点,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。