美文网首页
如何判断单链表是否相交并找出第一交点

如何判断单链表是否相交并找出第一交点

作者: 是一动不动的friend | 来源:发表于2017-11-06 21:22 被阅读14次

1.判断链表否是相交?
解法一:哈希表法,维护一个哈希表,分别遍历两个链表。将它们中的元素存入哈希表中,如果元素有重复那么两个链表就相交。


image.png

解法二:还有一种比较有想象力的解法,先遍历第一个链表到他的尾部,然后将尾部的next指针指向第二个链表(尾部指针的next本来指向的是null)。这样两个链表就合成了一个链表,判断原来的两个链表是否相交也就转变成了判断新的链表是否有环的问题了:即判断单链表是否有环?
这样进行转换后就可以从链表头部进行判断了,其实并不用。通过简单的了解我们就很容易知道,如果新链表是有环的,那么原来第二个链表的头部一定在环上。因此我们就可以从第二个链表的头部进行遍历的,从而减少了时间复杂度(减少的时间复杂度是第一个链表的长度)。


image.png

解法三:仔细研究两个链表,如果他们相交的话,那么他们最后的一个节点一定是相同的,否则是不相交的。因此判断两个链表是否相交就很简单了,分别遍历到两个链表的尾部,然后判断他们是否相同,如果相同,则相交;否则不相交。


image.png

2.如果相交求出交点?
解法一:如果可以分配较多的内存,先遍历链表A,遍历链表A的时候将node加入到一个hash表或者二叉树中。之后遍历链表B的node时,检查该node是否存在在数据结构中对应的位置就可以了。可能会比原始方法快一些(如果交点在链表中靠后的位置,这个代价可能就比较大了,因为要维护多余的数据结构,因此这种情况下实践中效率很可能比原始方法慢),不过会使用较多的内存空间。

解法二:遍历两个表分别知道两个表的长度a, b。然后让长表先走|a-b|步后,短表再开始走,直到相同,则相同的的第一个节点为交点。

相关文章

  • 如何判断单链表是否相交并找出第一交点

    1.判断链表否是相交?解法一:哈希表法,维护一个哈希表,分别遍历两个链表。将它们中的元素存入哈希表中,如果元素有重...

  • 算法

    排序:排序链表:iOS单向链表数据结构、判断两个链表是否相交并找出交点求解1-100之间的所有素数/质数:http...

  • 检测链表有环

    题目:如何判断一个单链表是否有环?若有环,如何找出环的入口节点。 一、单链表是否有环 思路分析: 单链表有环,是指...

  • 判断两个单链表是否相交及找到第一个交点

    题目:给两个单链表,如何判断两个单链表是否相交?若相交,则找出第一个相交的节点。这道题的思路和解法有很多,在这把这...

  • JAVA 判断两个单链表是否相交并求交点

    在上一篇文档中,通过java实现了单链表反转的问题,之后发现一个更有意思的问题就是如何判断两个链表是否相交?如果相...

  • 如何判断单链表是否存在环

    给定一个单链表,只给出头指针h: 如何判断是否存在环? 如何知道环的长度? 如何找出环的连接点在哪里? 带环链表的...

  • 链表相交问题

    判断两个单向链表是否相交,并找出他们的交点。这个问题我们分三种情况讨论: 一. 两个链表都不存在环 问题思路: ...

  • 如何判断链表是否有环

    给定一个单链表,只给出头指针: 1、如何判断是否存在环?2、如何知道环的长度?3、如何找出环的连接点在哪里?4、带...

  • 2017 届 网易校招 Android 面试之待跪篇

    网易(北京)校招面试 一面-电面-1h 自我介绍; 基础算法题:单链表判断是否相交、判断是否有环,找出环的第一个结...

  • 链表

    现在有一个单向链表,谈一谈,如何判断链表中是否出现了环 考察点:链表参考回答:单链表有环,是指单链表中某个节点的n...

网友评论

      本文标题:如何判断单链表是否相交并找出第一交点

      本文链接:https://www.haomeiwen.com/subject/qlqrmxtx.html