问题:给出两个单向链表的头指针,判断这两个链表是否相交。假设两个链表均不带环。
解法1:如果两个链表相交,那么两个链表就会有共同的节点,所以我们可以通过判断两个链表是否存在地址一致的节点来判断它们是否相交。
我们首先将第一个链表的节点地址进行hash排序,建立hash表,然后针对第二链表的第一个节点地址,查询hash表,如果它在hash表中出现,那么说明两个链表有共同的节点。
解法2:将第二个链表接在第一个链后面,如果得到的链表有环,则说明两个链表相交。这样就把问题转化为判断一个链表是否有环,与解法1相比,解法2的优点是不需要额外的空间。
解法3:两个没有环的链表如果相交于某一节点,那么在这个节点后的所有节点都是两个链表共有的,所以,如果两个无环链表相交,那么它们的最后一个结点一定是相同的。利用这个特性,我们可以非常快地找判断这两个链表是否相交。
首先我们遍历第一个链表,记住最后一个节点,然后遍历第二个链表,到最后一个节点时和第一个链表的最后一个节点比较,如果相同,则相交,否则,不相交。解法3比解法1、2都优。