每日编程21之单链表相交,环的相关问题研究

来源:互联网 发布:php curl post 图片流 编辑:程序博客网 时间:2024/05/16 00:38

首先如何判断二个单链表是否相交,也就是所谓的Y型链表问题。

算法很简单,只要分别遍历二个链表,对比二个链表的表尾元素是否相同即可


那么再进一步,如何找到这二个链表的交汇点。

只要在遍历的时候,记录2个链表的长度,M,N,假设M>N则长度为M的链表先走M-N步,然后二个指针同时走,当二个指针第一次相同的地方就是链表的交汇点。


判断一个单链表是否有环,如果有环的话,如何找到起始点,以及环的长度。。也就是说如何获得单链表环的所有信息。

用二个指针,first,second分别遍历链表,遍历结束的条件是

(1)second走到单链表的尽头(second->next==NULL,或second->next->next==NULL),如此则说明单链表没有环。。

(2)对于有环的情况,second会永远的走下去,但终究second会追上first,如此则说明单链表中有环。。


至于起始点和环长度的判断

首先考虑环的长度,在单链表如果有环,则first,second会相遇,从相遇的地方遍历一次,回到相遇点,在这个过程中统计元素的个数,即为环的长度。

关于起始点的问题,可以参考求二个单链表交汇点的思想

具体的说将这个环形单链表做一个抽象的拆分,分成2个单链表

(1)表头为原来单链表的表头,表尾为前述first,second交汇的节点P,长度为N

(2)表头为P,表尾为P,长度为M



OVER!!!