【面试题37】两个链表的第一个公共结点
【题目描述】
输入两个链表,找出它们的第一个公共结点。
【解决方案】
解法一:利用两个辅助栈,以此将两个链表的结点压入。然后分别弹出两个栈中的结点,直到找到最后一个相同的结点,即为它们的第一个公共结点。
缺点:需要耗费O(m+n)空间复杂度;
解法二:分别便利两个链表的长度,记录下两个链表的长度m,n (m>n),则m长的链表结点先走m-n步,直到找到它们相同的结点,即为它们的第一个公共结点。
优点:和第一种解决方法的时间复杂度相同,但是不需要耗费空间复杂度。
我的代码实现,仅供参考:
1 public static ListNode FindFirstCommonNode(ListNode headA, ListNode headB) 2 { 3 if (headA == null || headB == null) 4 return null; 5 6 ListNode listLong = headA, listShort = headB; 7 8 int lenA = GetListLength(headA); 9 int lenB = GetListLength(headB); 10 int lenDif = lenA - lenB; 11 12 if (lenA < lenB) 13 { 14 listLong = headB; 15 listShort = headA; 16 lenDif = lenB - lenA; 17 } 18 19 //先让长链表多走m-n步 20 while (lenDif > 0) 21 { 22 listLong = listLong.Next; 23 lenDif--; 24 } 25 26 //两个链表一起走,直到找到相同的结点为止 27 while ((listShort != null) && (listLong != null) && (listLong != listShort)) 28 { 29 listLong = listLong.Next; 30 listShort = listShort.Next; 31 } 32 33 return listLong; 34 } 35 36 public static int GetListLength(ListNode head) 37 { 38 int length = 0; 39 40 while (head != null) 41 { 42 head = head.Next; 43 length++; 44 } 45 46 return length; 47 }
转载于:https://www.cnblogs.com/HuoAA/p/4828195.html
【面试题37】两个链表的第一个公共结点相关推荐
- 剑指offer面试题[37]-两个链表的第一个公共结点
题目描述 输入两个链表,找出它们的第一个公共结点. /* struct ListNode {int val;struct ListNode *next;ListNode(int x) :val(x), ...
- 37. 两个链表的第一个公共结点
为什么80%的码农都做不了架构师?>>> 题目:输入两个链表,找出它们的第一个公共结点. 思路:先遍历两个链表得出它们各自的长度,然后让长链表先走,直到长度和短的一致,然后两个 ...
- 微软面试题之两个链表的第一个公共结点
问题描述:给定两个单向链表,找出它们的第一个公共节点.链表的节点定义如下: struct ListNode {int m_nKey;ListNode* m_pNext; }; 思路: 如果两个单向链表 ...
- 【剑指offer-Java版】37两个链表的第一个公共结点
两个链表中的第一个公共顶点: 解法一:两次遍历即可 第一次遍历找到两个链表的长度,求出差值k,然后较长的:链表先走k步,之后两个链表同时走,直到遇到第一个相同的结点为止 解法二:辅助栈,先顺序遍历并将 ...
- [剑指offer]面试题37:两个链表的第一个公共结点
面试题37:两个链表的第一个公共结点 题目:输入两个链表,找出它们的第一个公共结点.链表结点定义如下: struct ListNode {int val;ListNode *next;ListNode ...
- 剑指offer——面试题37:两个链表的第一个公共结点
剑指offer--面试题37:两个链表的第一个公共结点 20180906整理 Solution1: 时间复杂度为O(n2)O(n2)O(n^2)的垃圾算法 /* struct ListNode {in ...
- [转] 程序员面试题精选100题(35)-找出两个链表的第一个公共结点
[转] http://hi.baidu.com/evrest/blog/item/bb9365fc7569378ab801a059.html 题目:两个单向链表,找出它们的第一个公共结点. 链表的结点 ...
- 《剑指offer》-- 两个链表的第一个公共结点、链表中环的入口结点、删除链表中的重复结点
一.两个链表的第一个公共结点: 1.题目: 输入两个链表,找出它们的第一个公共结点. 2.解题思路: (1)第一种:找出两个链表的长度,然后让长的链表先走两个链表的长度差,接着两个链表一起走. (2) ...
- 牛客题霸 [两个链表的第一个公共结点] C++题解/答案
牛客题霸 [两个链表的第一个公共结点] C++题解/答案 题目描述 输入两个链表,找出它们的第一个公共结点.(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的) ...
- 求两个链表的第一个公共结点各种情况及三种思路分析
转自:http://blog.csdn.net/ssopp24/article/details/72377184 1.寻找两个链表的第一个公共结//这道题可以有很多种思路, 我们按照, 有坏到好的顺序 ...
最新文章
- 科大讯飞CV赛baseline:图像分类实践+0.55
- 盘点2018年计算机视觉领域技术突破
- 在LINUX中部署Apache
- 大数据集群某节点彻底损毁后重装系统恢复(持续更新中)
- 模板方法模式(Tempalte Method Pattern)
- CSS学习-网页导航栏
- 【java学习之路】(javaWeb【后端】篇)005.会话
- 代码生成器集合(整理)
- linux中的sed指令
- 启动计算机实现5秒开机,win10提高开机速度的设置教程 电脑五秒开机优化步骤...
- 华为rh5885服务器oid_高性能全冗余 华为RH5885 V3服务器解析
- 未受信任的企业级开发者_iPhone提示“未受信任的企业级开发者”怎么办?解决苹果手机APP不信任的方法...
- 《A Neural Layered Model for Nested Named Entity Recognition》
- 编写Java程序,根据提供的 IP 地址,获取主机名称和域名
- win10系统怎么打开pdf文件
- Opencv多版本共存问题
- IP MAC捆绑原理及缺陷的讨论
- java版溺尸刷怪塔_minecraft河流群系溺尸刷怪塔存档
- 从乐清女孩发出救命信息后殒命想到,微信滴滴应增加SOS求救功能
- ACA世界大赛_让青年设计发声, 第二期!