题目摘要
找到两条单向链路的交叉节点
解法
跑圈法进阶版。两个指针分别指向两条链路的头结点,同时逐步往后遍历,当一个指针到达尾部时,将该指针指向另一条链路的头部,另一个指针同样处理。在第二次遍历时如果两个指针指向的节点相等,则返回该节点
注意
边界条件比较多,需要注意
可问问题
- 链表中是否有圈
原题
Write a program to find the node at which the intersection of two singly linked lists begins.
For example, the following two linked lists:
A: a1 → a2
↘
c1 → c2 → c3
↗
B: b1 → b2 → b3
begin to intersect at node c1.
Notes:
- If the two linked lists have no intersection at all, return null.
- The linked lists must retain their original structure after the function returns.
- You may assume there are no cycles anywhere in the entire linked structure.
- Your code should preferably run in O(n) time and use only O(1) memory.