首页 > 代码库 > 编程之美---判断两个链表是否相交
编程之美---判断两个链表是否相交
首先,判断一个链表是否有环?
对于这个问题:可以用两个指针,刚开始都指向头节点,然后一个指针每次向后移一步,另一个指针每次向后移两步,如果最后移两步的指针为空时,说明无环,如果最后两个指针相等,说明有环。如果把第一指针看成静止,则相当于第二个每次走一步,所以在那个环上时,是一定能相遇的。
如何找到这个链表环的入口?
当这两个指针相遇后,把第一个指针移向头,两个指针每次都只移一步,再次相等时,就是环的入口。证明:设环上相遇位置为距离环入口处P,入口处前有M个节点,,环肾功能有N个节点,从入口处开始计时,则P1走了(M+P-M)%N,因为计时点为入口处,因为P2每次移两步,所以P2走了(2*(M+P)-M)%N,因为相遇,所以两指针位置一样,(M+P-M)%N=(2*(M+P)-M)%N,得X%N=(M+2*P)%N, 所以(M+P)%N=0。所以,当第一指针移M时,第二个指针也移M,此时,第二个指针在(M+P),因为(M+P)%N=0,所以第二个指针在入口处。
如何找到一个链表中倒数第K个节点?
可以设两个指针指向头节点,然后第二个先后移K步,然后两个同时移,第二个到最后,第一个指针的位置即为所求。
判断两个链表是否相交?
可以用两个指针,分别指向两个链表的头,都把它们移向表尾,如果最后这两个指针相等,则说明这两个链表相交。
编程之美---判断两个链表是否相交
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。