方法一:
最笨的方法,遍历链表1,每遍历一个节点,判断这个节点是否在链表2中
for node1 in l1
for node2 in l2
if node1 == node2
return True
时间复杂度比较高,O(l1.length*l2.length)
方法二:
万能的hash,对于节点地址进行hash到不同的桶中,首先将l1的所有节点的地址hash到不同的桶中,然后对l2的每个节点,将它的节点地址hash到不同的桶中,一旦发现两个节点hash到相同的桶中,说明节点地址有相同,则相交。
时间复杂度:O(l1.length+l2.length)
方案三:
如果两个链表中的相交,必然尾节点肯定是一样的,只要两个链表都遍历到尾部,即可,那么只要比较尾节点是否一致即可
时间复杂度:O(l1.length+l2.length)
方案4:
将一个链表首尾相接,判断链表是否有环
如何求出相交节点?
方案一:
好比hash法,第一个同时hash到相同的桶的节点就是相交节点
方案二:
求环入口节点
方案三:
判断相交的过程中要分别遍历两个链表,同时记下各自的长度。然后再遍历一次:长链表节点先从头节点出发前进(lengthMax-lenghMin)步,之后两个链表同时前进,每次一步,相遇的第一个节点即为两个链表相交的第一个节点。