题目:如何判断两个单链表是否有交点。
思路:
- 暴力解法:判断第一个链表的节点是否在第二个链表中 O(len1*len2)
- Hash解法:第一个链表地址,减去起始节点偏移量作为Hash函数,使用地址存储建立Hash表。遍历第二个链表,查看在Hash表中是否出现。O(len1+len2)
- 相连:两个链表连在一起,如果有环,就有交点。
- 想法:如果两个链表相交,则从交点后,必然相同。递归遍历到最后,递归结束的时候,一起会,回到不同的地方就得出是否有交点了。
引申题目:链表有环?
- 设置快慢指针:定义p、q两个指针,p指针每次向前走一步,q每次向前走两步,若在某个时刻出现 p == q,则存在环。