剑指offer-面试题37:两个链表中的一个公共结点
来源:互联网 发布:国家质检总局网络 编辑:程序博客网 时间:2024/06/15 17:03
题目:输入连个链表,找出它们的第一个公共结点。
思路:两个链表,用两个指针这个问题就over了。因为每个结点只有一个m_pNext指针,所以第一个公共结点之后,链表合并成一条线,必然成Y型结构。我们用两个指针从表头开始遍历,但是需要注意的是两个链表的长度可能不一样,为了保持两个指针的同步让指向长一些的链表的指针先走,先走的步数即为两个链表的长度差。然后开始同时移动指针,发现相同的结点即返回结点值。另一种思路是把两个链表的结点压入两个栈,因为两个链表从尾结点开始往回退的一部分是相同的,我们不断出栈找出最后一个相同的结点即可(它相对于链表而言是最先的共同结点)。但是这种方法需要额外的O(m+n)空间,两种方法的时间复杂度都是O(m+n)。
ListNode* FindFirstCommonNode(ListNode* pHead1, ListNode* pHead2){ unsigned int length1 = GetListLength(ListNode* pHead1); unsigned int length2 = GetListLength(ListNode* pHead2); unsigned int LengthDiff = length1 - length2; ListNode* pHeadLong = pHead1; ListNode* pHeadShort = pHead2; if(length1 < length2) { pHeadLong = pHead2; pHeadShort = pHead1; LengthDiff = length2 - length1; } for(int i = 0; i < LengthDiff; ++i) pHeadLong = pHeadLong->m_pNext; while(pHeadLong != NULL && pHeadShort != NULL && pHeadLong != pHeadShort) { pHeadLong = pHeadLong->m_pNext; pHeadShort = pHeadShort->m_pNext; } return pHeadLong;}unsigned int GetListLength(ListNode* pHead){ ListNode* pNode = pHead; int length = 0; while(pNode != NULL) { ++length; pNode = pNode->m_pNext; } return length;}
0 0
- 剑指offer-面试题37:两个链表中的一个公共结点
- 【剑指offer】面试题37:两个链表的第一个公共结点
- [剑指offer]面试题37:两个链表的第一个公共结点
- 剑指Offer:面试题37 两个链表的第一个公共结点
- 剑指offer 面试题37 两个链表的第一个公共结点
- 《剑指Offer》学习笔记--面试题37:两个链表的第一个公共结点
- 【剑指Offer学习】【面试题37:两个链表的第一个公共结点】
- 剑指Offer面试题37(Java版):两个链表的第一个公共结点
- 剑指offer之面试题37两个链表的第一个公共结点
- 剑指Offer----面试题37:两个链表的第一个公共结点
- 剑指offer--面试题37:两个链表的第一个公共结点
- 剑指Offer面试题37(Java版):两个链表的第一个公共结点
- 剑指Offer之面试题37:两个链表的第一个公共结点
- 剑指offer-面试题37-两个链表的第一个公共结点
- 剑指Offer系列-面试题37:两个链表的第一个公共结点
- 剑指offer-面试题37-两个链表的第一个公共结点
- 剑指offer 面试题37 两个链表的第一个公共结点
- 【剑指offer】面试题37:两个链表的第一个公共结点
- Rational Software Architect 的介绍和基础教程
- setsockopt和getsockopt函数解析
- Boost状态机--中级篇
- [1] Word样式/主题/模板
- DS18B20时序分析详细步骤
- 剑指offer-面试题37:两个链表中的一个公共结点
- AFNetworking源码之AFSecurityPolicy模块
- 发送自定义广播 之 有序广播
- Android自定义下拉刷新动画--仿百度外卖下拉刷新
- 32位与64位操作系统以及CPU的关系
- 发现自己模拟器的sdcard状态为removed
- 不定义JQuery插件,不要说会JQuery
- linux下 find 和 grep命令结合使用查找定位字符串
- 21天学通Linux嵌入式开发教程