您的位置:首页 > 编程语言

编程之美-编程判断两个链表(可能含环)是否相交以及相交的第一个结点

2015-08-27 21:18 429 查看
第三章 3.6 扩展题

扩展1 : 如何判断两个链表(含环)是否相交

扩展2 : 如何求出两个链表相交的第一个结点

假设两个链表分别为A,B链表

扩展1 :如何判断两个链表(含环)是否相交

解题思路:

(1)先判断AB链表是否含有环,如果不含有环则按照之前的文章 编程之美-判断两个链表是否相交 | Pan Hai nan’Blog 进行;

(2)如果AB链表中有一个链表含有环,而另一个不含环,则可以肯定AB链表不相交;

(3)如果AB链表都含有环,则可以肯定的是如果两个链表相交,那么AB的环肯定是共有的;根据这个特点可以进行这样的判断:找出A链表环中的任意一个结点,然后遍历B链表比较此结点是否在B链表中;如果在,则相交;反之不相交。

扩展2 : 如何求出两个链表相交的第一个结点(这里我们先讨论无环的链表,因为有环的链表不是很好判断相交的第一个结点位置)

解题思路:

(1)先遍历得出AB链表的表长,这是其实两个指针指向AB链表的尾部,我们可以先进行判断尾结点是否相等,相等则AB链表相交,否则不相交,就不用进行后续步骤了;

(2)假设A链表的长度大一些,然后先遍历A链表Length(A)-Length(B)步,此时A链表剩下的没有遍历的长度正好和B链表的表长度相等;

(3)同时遍历A链表剩下的结点和B链表所有结点,并进行比较,如果在遍历过程中找到了两个相等的结点,则此结点就是AB链表相交的第一个结点。

这里就讲到这吧,有环的两个链表判断相交的第一个结点位置目前还没有思绪,有思绪了再补上。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: