如何判断两个单链表(无环)是否交叉

【WR笔试】

题目描述:

单链表相交是指两个链表存在完全重合的部分,如下图:
在这里插入图片描述

解法一:Hash法
我们可以先从head1开始遍历,把每个结点都加入到一个集合s中;然后我们再从head2开始遍历,然后遍历到的结点都判断一下是否存在于集合中,如果在集合中比如题目中的5就说明这个结点是交叉的开始,可以退出遍历返回True了。
在这里插入图片描述

方法二:首尾相接法
首尾相交法有两种思路:
① 第一种是把链表1的尾巴接到链表2的头,这样会形成一个环,这样我们通过前面判断一个链表是否有环的博客就可以判断是否交叉了。这里就不再进行代码实现了。
在这里插入图片描述
② 第二种是把链表1的尾巴接到链表1的头,这样会形成一个环,到目前为止都和①相同,但是我们这里只判断是否交叉,所以我们只需要进行遍历链表2,如果交叉,两个链表的尾巴是相同的,那么我们通过链表2也可以走到链表1的头,这样就实现了判断是否交叉,但是这种方法找不到交叉开始的位置。
在这里插入图片描述

测试:

  1. 构造一个有交叉的链表
    在这里插入图片描述

  2. 测试调用
    在这里插入图片描述

posted @ 2019-11-01 13:23  段明  阅读(589)  评论(0编辑  收藏  举报