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

20180906整理

Solution1:

时间复杂度为O(n2)O(n2)O(n^2)的垃圾算法

/*
struct ListNode {int val;struct ListNode *next;ListNode(int x) :val(x), next(NULL) {}
};*/
class Solution {
public:ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {if(pHead1 == pHead2)return pHead2;else {struct ListNode *tempNode1 = pHead1, *tempNode2 = pHead2;while(tempNode1 != NULL){tempNode2 = pHead2;while(tempNode2 != NULL){if(tempNode1 == tempNode2)return tempNode1;tempNode2 = tempNode2->next;}tempNode1 = tempNode1->next;}return NULL;}}
};

Solution2:

书上写的是先找出两个链表的长度,然后长链表先走长度差步的方法也可以。
【重点掌握算法】

/*
struct ListNode {int val;struct ListNode *next;ListNode(int x) :val(x), next(NULL) {}
};*/
class Solution {
public:ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {if (!pHead1 || !pHead2) return NULL;ListNode *cur1 = pHead1, *cur2 = pHead2;int nums1 = 0, nums2 = 0, diff = 0;while (cur1) {nums1++;cur1 = cur1->next;}while (cur2) {nums2++;cur2 = cur2->next;}diff = abs(nums1 - nums2);//置位cur1 = pHead1;cur2 = pHead2;if (nums1 > nums2) { //子串1长while (diff--)cur1 = cur1->next;} else { //子串2长while (diff--)cur2 = cur2->next;}while (cur1 != cur2) {cur1 = cur1->next;cur2 = cur2->next;}return cur1;}
};

Solution3:

20180906更:真是sao出水了来了
下面这个代码比较吊。。
风骚走位,叹为观止,自叹弗如,自叹弗如~~~~
其思想是俩指针通过多走一遍线路形成闭环来抵消掉两个链表的长度差,真是聪明啊~
如下图所示,一目了然:

图咋这么大。。。
参考网址:https://www.nowcoder.com/profile/3017991/codeBookDetail?submissionId=19005908

class Solution {
public:ListNode* FindFirstCommonNode( ListNode *pHead1, ListNode *pHead2) {ListNode *p1 = pHead1;ListNode *p2 = pHead2;while(p1!=p2){p1 = (p1==NULL ? pHead2 : p1->next);p2 = (p2==NULL ? pHead1 : p2->next);}return p1;}
};

剑指offer——面试题37:两个链表的第一个公共结点相关推荐

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

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

  2. 剑指offer(C++)-JZ52:两个链表的第一个公共结点(数据结构-链表)

    作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 输入两个无环的单向链表,找出它们的第一个公共结点,如果没有公共节点则返回空.(注意因 ...

  3. 剑指offer面试题52. 两个链表的第一个公共节点(双指针法)

    题目描述 输入两个链表,找出它们的第一个公共节点. 思路 详见链接 代码 class Solution:def getIntersectionNode(self, headA:ListNode, he ...

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

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

  5. 《剑指Offer》52:两个链表的第一个公共节点

    题目 输入两个链表,找出它们的第一个公共节点. public static class ListNode{public int val;public ListNode next;public List ...

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

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

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

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

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

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

  9. 剑指offer——面试题57:删除链表中重复的结点

    剑指offer--面试题57:删除链表中重复的结点 Solution1: 删两遍,自己想的破算法.理论上时间复杂度也是O(n)O(n)O(n),并非最优解. /* struct ListNode {i ...

最新文章

  1. SpringBoot Mybatis解决使用PageHelper一对多分页问题
  2. SCCM管理 - 更新部署
  3. 【重温基础】7.时间对象
  4. failed to get the task for process XXX(解决方案)
  5. C语言编程中关于负数的%运算的判定。
  6. 剑指Offer - 面试题66. 构建乘积数组(正反遍历)
  7. image pil 图像保存_使用PIL保存图像
  8. qt 发送数据到http
  9. 马蜂窝承认部分点评造假;阿里要发射卫星;iPhone XR 供不应求 | 极客头条
  10. 团队项目(MVP-----------新能源汽车无线充电管理系统)个人任务(5)
  11. Atitit websocket 的前后端实现最佳实践t66 目录 1. 技术选型 1 2. 1.首先,在pom.xml引入如下jar包。Java-WebSocket-1.3.0.jar 1 3.
  12. Python爬虫:数据提取
  13. 易之风门诊收费系统 v1.0 官方
  14. stylecloud:一款可以制作个性化词云图的 Python 神器
  15. 你有必要不沾计算机一段时间英语,八年级上册英语第一单元背默(人教版)
  16. 百病皆由痰作祟~一碗神奇的水?(生姜红糖水、姜糖水、中医)
  17. 【服务器数据恢复】断电导致raid信息丢失的磁盘阵列数据恢复案例
  18. Verilog语言基础
  19. 工大校园邮箱申请流程
  20. CSS课堂案例8-小米布局

热门文章

  1. 树莓派4B安装Ubuntu20.04
  2. 张先生是什么意思_她为家付出几十年,只因拿六千礼金,遭儿媳怒怼:什么钱你都敢拿?...
  3. linux的工程管理器是,Linux工程管理器——make
  4. aes算法实现c语言_消息摘要算法MD5图解及C语言实现
  5. github安装_安装ROS时无法初始化(无法连接raw.github)的解决方案
  6. mysql 字段有正负值的时候 sum无效_京东金融数据分析:MySQL+HIVE的结合应用案例详解...
  7. python数字组合算法_python猜数字游戏快速求解解决方案
  8. Python数据结构与算法(1.5)——Python基础之函数与异常
  9. 仅需6道题轻松掌握Python时间和日期处理 | Python技能树征题
  10. java核心教程_核心Java教程