题目
查找两个单链表相交的起始节点
输入:相交节点的值、两个单链表listA和listB以及各自相交节点的索引值(每个单链表的第一个节点的索引值为0);
输出:两个单链表相交节点的值,如果两个节点不相交则返回null;
注意事项:
- 如果两个链表没有交点,返回
null
; - 在返回结果后,两个链表仍须保持原有的结构;
- 假定整个链表结构中没有循环;
- 程序尽量满足 O(n) 时间复杂度,且仅用 O(1) 内存;
解法思路:
使用一个节点指针node1
通过对链表A的遍历,遍历完成后再将node1
指针重新指向链表B的头节点,当走到图中的相交节点时:
链表A走过的路程为:a+c+b;
链表B同理,当遍历完再将节点指针node2
指向链表A的头节点,继续遍历,当遍历到相交节点的时:
链表B走过的路程为:b+c+a;
即:a+c+b=b+c+a,走过的路程相同,所以当经历过上述的一遍循环之后,两个指针必定会在相交节点相遇!
所以输出该当前节点即可!