第六十二题(求两个单向链表的第一个公共节点)
来源:互联网 发布:淘宝几个好评是几分 编辑:程序博客网 时间:2024/06/05 17:51
62.找出链表的第一个公共结点。
题目:两个单向链表,找出它们的第一个公共结点。
链表的结点定义为:
struct ListNode
{
int m_nKey;
ListNode* m_pNext;
题目:两个单向链表,找出它们的第一个公共结点。
链表的结点定义为:
struct ListNode
{
int m_nKey;
ListNode* m_pNext;
};
分析:
这道题最直观的解法就是顺遍历其中的一个链表,对于其中的每一个链表节点,通过遍历第二个链表的节点来判断两个节点是否相同,第一次得到相同的结果时就是找到了他们的第一个公共节点,该算法的复杂度为o(mn)。
还有另外一种线性复杂度的方法,考虑若这两个单向链表长度相同,那么他们从头结点同时开始遍历并比较节点,首次相同的节点就是他们的第一个公共节点,那么对于长度不相同的两个链表,怎么处理?对了,我们可以先让长度较长的链表先移动一定的步数后再让较短的开始移动,移动的步数其实就是两个链表的长度差,这样子就可以了。
这里给出第二种方法的代码:
ListNode* firstCommonNode(ListNode *head1, ListNode *head2){int len1=0, len2=0;ListNode *p1, *p2;if (head1 == NULL || head2 == NULL)return NULL;p1 = head1;p2 = head2;while (p1 != NULL){p1 = p1->m_pNext;len1++;}while (p2 != NULL){p2 = p2->m_pNext;len2++;}p1 = head1;p2 = head2;while (len1 > len2){p1 = p1->m_pNext;len1--;}while (len1 < len2){p2 = p2->m_pNext;len2--;}while (p1 != p2){p1 = p1->m_pNext;p2 = p2->m_pNext;}return p1;}
0 0
- 第六十二题(求两个单向链表的第一个公共节点)
- 找到两个单向链表的第一个公共节点
- 找到两个单向链表的第一个公共节点
- 找到两个单向链表的第一个公共节点
- 两个单向链表的第一个公共节点
- 两个单向链表相交,找到第一个公共节点
- 两条相交的单向链表,如何求他们的第一个公共节点
- 面试题04:找出两个单向链表的第一个公共节点
- 求两个链表的第一个公共节点(来源于剑指名企offer)
- (LeetCode)两个链表的第一个公共节点
- 求两个单向无环链表的第一个公共交点
- 两个链表的公共第一个公共节点
- 剑指off-求两个链表的第一个公共节点
- 剑指offer 37:求两个链表的第一个公共节点
- 【面试题】剑指Offer-37-求两个链表的第一个公共节点
- 找出链表的第一个公共结点 【微软面试100题 第六十二题】
- 两个链表的第一个公共节点
- 寻找两个相交链表的第一个公共节点
- 大规模is么做时脑上话
- QT 使用jsoncpp
- 格栅天花吊顶怎么样?北新建材华南最大石膏板生产线建成试产
- 每天一个linux命令(4):mkdir命令
- 写一个函数模拟C++中的strstr()函数:该函数的返回值是主字符串中子字符串的位置以后的所有字符,不用C程序已有函数实现
- 第六十二题(求两个单向链表的第一个公共节点)
- oracle-ora 各种sql异常描述
- python 入门笔记1
- NOJ1075社会关系网络——并查集
- 深入Java单例模式
- WebView使用简单介绍
- keystore文件转换格式为pk8+x509.pem
- MSP430_定时器输出PWM
- 我是一ft90器筒把电芯