两个链表的第一个公共节点问题
现在有两个单链表,他们在某个节点处相交,请找出这个节点。
比如图中两个链表:
-
list1 = [a,b,c,d,e,f]
-
list2 = [h,i,e,f]
他们的第一个公共节点为e
经过我们统计,这道题面试的出现概率为9.3%。
0分思路1
找两个链表中节点值一样的节点,哪个值在两个链表中都出现,就认为是第一个公共节点?
首先,我们要找的是这个节点,而不是这个节点的值;
另外,即使某个节点不是两个链表的公共节点,值依然可以相同。
0分思路2
对链表1中每个节点依次在链表2中查找是否有相同节点,哪个节点在链表2中出现,就认为是第一个公共节点?
这个方法可以找到第一个公共节点,但是效率太低了。
假设链表1长度为M,链表2长度为N,则时间复杂度Time complexity = O(M*N)
面试官想要的思路
先在链表1和链表2的头部分别设置一个指针pointer1, pointer2:
再分别计算链表1和链表2的长度M和N,图中链表1长度为6,链表2长度为4。
接着,如果M>N,则链表1的指针pointer1向前移动M-N步;否则,链表2的指针pointer2向前移动N-M步,于是图中pointer1移动两步:
然后两个指针不断同时向前移动1步,直到pointer1=poin