### 这道题分两种情况讨论:链表是否存在环(询问面试官)。
---
#### 无环
思路:如果这两个链表相交,那么从它们的第一个相交的点开始,之后两个链表上的节点都是相同的。因此,我们只要遍历两个链表判断最后那个节点是否相同就可以了。
```
bool isInteractNoLoop(SList *list1, SList *list2)
{
if (list1 == nullptr || list2 == nullptr) {
return false;
}
SList *lastNode1 = list1, *lastNode2 = list2;
// 两个 while 循环分别求出两个链表的最后一个节点
while (list1 != nullptr) {
lastNode1 = list1;
list1 = list1->m_next;
}
while (list2 != nullptr) {
lastNode2 = list2;
list2 = list2->m_next;
}
return (lastNode1 == lastNode2);
}
```
#### 不知道是否有环
这种情况我们需要先[判断链表是否有环](https://www.kancloud.cn/persuez/algorithm/858057)。
1. 两个链表都没有环, 按上面无环的算法走;
2. 一个有环,一个无环,这两个链表不可能相交;
3. 两个都有环,此时两条链表如果相交,那么一定共享这个环。所以我们可以在判断链表A是否有环时返回碰撞点,然后遍历B链表查看碰撞点是否也在B中,在的话,则表示两条链表共享环,否则不共享。