【题目描述】

输入两个链表,找出它们的第一个公共结点。

【解决方案】

解法一:利用两个辅助栈,以此将两个链表的结点压入。然后分别弹出两个栈中的结点,直到找到最后一个相同的结点,即为它们的第一个公共结点。

缺点:需要耗费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】两个链表的第一个公共结点相关推荐

  1. 剑指offer面试题[37]-两个链表的第一个公共结点

    题目描述 输入两个链表,找出它们的第一个公共结点. /* struct ListNode {int val;struct ListNode *next;ListNode(int x) :val(x), ...

  2. 37. 两个链表的第一个公共结点

    为什么80%的码农都做不了架构师?>>>    题目:输入两个链表,找出它们的第一个公共结点. 思路:先遍历两个链表得出它们各自的长度,然后让长链表先走,直到长度和短的一致,然后两个 ...

  3. 微软面试题之两个链表的第一个公共结点

    问题描述:给定两个单向链表,找出它们的第一个公共节点.链表的节点定义如下: struct ListNode {int m_nKey;ListNode* m_pNext; }; 思路: 如果两个单向链表 ...

  4. 【剑指offer-Java版】37两个链表的第一个公共结点

    两个链表中的第一个公共顶点: 解法一:两次遍历即可 第一次遍历找到两个链表的长度,求出差值k,然后较长的:链表先走k步,之后两个链表同时走,直到遇到第一个相同的结点为止 解法二:辅助栈,先顺序遍历并将 ...

  5. [剑指offer]面试题37:两个链表的第一个公共结点

    面试题37:两个链表的第一个公共结点 题目:输入两个链表,找出它们的第一个公共结点.链表结点定义如下: struct ListNode {int val;ListNode *next;ListNode ...

  6. 剑指offer——面试题37:两个链表的第一个公共结点

    剑指offer--面试题37:两个链表的第一个公共结点 20180906整理 Solution1: 时间复杂度为O(n2)O(n2)O(n^2)的垃圾算法 /* struct ListNode {in ...

  7. [转] 程序员面试题精选100题(35)-找出两个链表的第一个公共结点

    [转] http://hi.baidu.com/evrest/blog/item/bb9365fc7569378ab801a059.html 题目:两个单向链表,找出它们的第一个公共结点. 链表的结点 ...

  8. 《剑指offer》-- 两个链表的第一个公共结点、链表中环的入口结点、删除链表中的重复结点

    一.两个链表的第一个公共结点: 1.题目: 输入两个链表,找出它们的第一个公共结点. 2.解题思路: (1)第一种:找出两个链表的长度,然后让长的链表先走两个链表的长度差,接着两个链表一起走. (2) ...

  9. 牛客题霸 [两个链表的第一个公共结点] C++题解/答案

    牛客题霸 [两个链表的第一个公共结点] C++题解/答案 题目描述 输入两个链表,找出它们的第一个公共结点.(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的) ...

  10. 求两个链表的第一个公共结点各种情况及三种思路分析

    转自:http://blog.csdn.net/ssopp24/article/details/72377184 1.寻找两个链表的第一个公共结//这道题可以有很多种思路, 我们按照, 有坏到好的顺序 ...

最新文章

  1. 科大讯飞CV赛baseline:图像分类实践+0.55
  2. 盘点2018年计算机视觉领域技术突破
  3. 在LINUX中部署Apache
  4. 大数据集群某节点彻底损毁后重装系统恢复(持续更新中)
  5. 模板方法模式(Tempalte Method Pattern)
  6. CSS学习-网页导航栏
  7. 【java学习之路】(javaWeb【后端】篇)005.会话
  8. 代码生成器集合(整理)
  9. linux中的sed指令
  10. 启动计算机实现5秒开机,win10提高开机速度的设置教程 电脑五秒开机优化步骤...
  11. 华为rh5885服务器oid_高性能全冗余 华为RH5885 V3服务器解析
  12. 未受信任的企业级开发者_iPhone提示“未受信任的企业级开发者”怎么办?解决苹果手机APP不信任的方法...
  13. 《A Neural Layered Model for Nested Named Entity Recognition》
  14. 编写Java程序,根据提供的 IP 地址,获取主机名称和域名
  15. win10系统怎么打开pdf文件
  16. Opencv多版本共存问题
  17. IP MAC捆绑原理及缺陷的讨论
  18. java版溺尸刷怪塔_minecraft河流群系溺尸刷怪塔存档
  19. 从乐清女孩发出救命信息后殒命想到,微信滴滴应增加SOS求救功能
  20. ACA世界大赛_让青年设计发声, 第二期!

热门文章

  1. [Swift]LeetCode593. 有效的正方形 | Valid Square
  2. Python3 中使用sys.argv详解
  3. 数字电路与系统-知识点2
  4. Jmeter html 报告中添加90% line time
  5. Asp.net网站如何播放Flv视频
  6. Centos7升级gcc版本方法之一使用scl软件集
  7. 微信小程序 选择微信自带的地址 用户授权选择了拒绝
  8. Direct3D光与材质的颜色值
  9. http 请求头回显
  10. 如何处理iOS中照片的方向