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

编程判断两个链表是否相交

2013-09-29 00:00 183 查看
题目:给出两个单向链表的头指针,比如h1,h2,判断这两个链表是否相交。(均不带环)

解法一:先判断第一个链表的每个节点是否在第二个链表中。复杂度O(Length(h1)*Length(h2)),显然不可以。

解法二:利用计数的方法。如何,两个链表相交的话,记他们含有相同的节点,相同的节点就有相同的地址,一个简单的方法是对第一个链表的节点地址进行hash排序,简历hash表,然后针对第二个标的每一个节点的地址查询hash表,如果他在hash表中出现,那么说明第二个链表和第一个链表有共同的节点。时间复杂度O(Length(h1)+Length(h2)),时间复杂度还不错,但增加了O(Length(h1))的空间复杂度。

解法三:转化为另一已知问题。由于没有环,所以我们把两个链表连在一起,把h2的表头接在h1的表尾,如果h1,与h2有交点的话,必然形成环,而h2的头结点一定在环里,只要从h2的开头开始,一次遍历,如果回到h2,则两个链表相交。当然,个人认为这个方法虽然复杂度低了,但是不好,因为它不能让我们得知哪些是交点。

解法四:抓住要点。如果两个链表相交,那么从第一个相交的点之后,两个链表的之后节点都相同。即最后一个节点是相同的,那么解决办法是先遍历第一个链表,记住最后一个节点,其次遍历第二个链表到最后一个链表,看是最后两个节点是否相同。编程之美上说这个方法比解法三更胜一筹,不过相比之下,还是更喜欢方法三。

扩展问题(没有去参考别人的解法,仅是个人想到就怎么写的,欢迎一起交流):1.如果链表可能有环呢?可以用方法2。2.如果我们必须求出两个链表相交的第一个节点呢。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  链表 相交 面试题