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

【编程之美】3.6 - 判断两个链表是否相交

2012-06-06 23:01 169 查看
问题描述:给出两个单向链表的头指针(h1,h2),判断这两个链表是否相交。假设两个链表均不带环。

解法一:直观的想法

判断第一个链表胡每一个节点是否在第二个链表中。

时间复杂度为O(Length(h1)*Length(h2))。

解法二:利用计数的方法

如果两个链表相交,就会有共同的节点。我们可以把第一个链表的节点地址进行hash排序,建立Hash表,然后针对第二个链表的每个节点的地址查询Hash表,如果在表中出现,就说明交点出现。

解法三:转化为另一已知问题

把第二个链表接到第一个链表后面,如果得到的链表有环,则说明这两个链表相交。这样就把问题转化为判断一个链表是否有环。

而判断一个链表是否有环,只需进行遍历看是否会回到起始点就可以判断出来。

解法四:抓住要点

因为“如果两个无环的链表相交与某一节点,那么在这个节点之后的所有节点都是两个链表共有的”。那么可以先遍历第一个链表,记住最后一个节点,然后遍历第二个链表,到最后一个节点时和第一个链表的最后一个节点做比较,若相同,则相交,否则,不相交。

扩展问题:

1.若链表有环呢?如何判断?

2.如何求相交的第一个节点?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: