题目:两个单向链表,找出它们的第一个公共结点。
链表的结点定义为:
struct ListNode
{
int m_nKey;
ListNode* m_pNext;
};
分析:这是一道微软的面试题。微软非常喜欢与链表相关的题目,因此在微软的面试题中,链表出现的概率相当高。
如果两个单向链表有公共的结点,也就是说两个链表从某一结点开始,它们的m_pNext都指向同一个结点。但由于是单向链表的结点,每个结点只有一个m_pNext,因此从第一个公共结点开始,之后它们所有结点都是重合的,不可能再出现分叉。所以,两个有公共结点而部分重合的链表,拓扑形状看起来像一个Y,而不可能像X。
看到这个

本文介绍了如何找出两个单向链表的第一个公共结点,提供了两种线性时间复杂度的解决方案:一种通过计算链表长度差进行同步遍历,另一种是利用快慢指针判断环并找到环的入口。此外,还讨论了有环链表的相交问题及如何找到第一公共交点。

931

被折叠的 条评论
为什么被折叠?



