本文首发在我的个人博客:https://jlice.top/p/7qhfm/。欢迎大家前去参观,么么哒~
题目
今天面试时,面试官问了这样一个问题:两个单链表相交,怎么求交点。所谓相交,就是两个节点的next指针相同。
简单解法
一个简单的思路是:分别遍历这两个链表,并将这两个链表的节点分别保存到两个列表里,然后同步逆序遍历这两个列表,当出现不相同的元素时,则下一个元素就是这两个链表的交点。
例如,对于上图的两个单链表,遍历上面的单链表得到列表:A, B, C, D, E, F, G;遍历下面的单链表得到列表:H, I, E, F, G。因为单链表相交之后就汇合了,汇合之后的节点就是一样的,而汇合之前的节点不一样,所以同步逆序遍历这两个列表:G-G, F-F, E-E, D-I……于是,E节点就是交点。
这种做法时间复杂度为\(O(n)\),但空间复杂度为\(O(n)\),有没有空间复杂度更低的解法呢?
如果使用HashMap存储,先遍历上面的单链表,并把节点存储到HashMap里,然后遍历下面的单链表,每次都看当前节