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

思路一:用set容器,不符合题意

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution {public:ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {set<ListNode*> mySet;while(headA!=nullptr){mySet.insert(headA);headA = headA->next;}while(headB!=nullptr){if(mySet.find(headB)!=mySet.end()){return headB;}else{headB = headB->next;}}return nullptr;}
};

思路二:双指针

解题思路:
我们使用两个指针 node1,node2 分别指向两个链表 headA,headB 的头结点,然后同时分别逐结点遍历,当 node1 到达链表 headA 的末尾时,重新定位到链表 headB 的头结点;当 node2 到达链表 headB 的末尾时,重新定位到链表 headA 的头结点。

这样,当它们相遇时,所指向的结点就是第一个公共结点。

作者:z1m
链接:https://leetcode-cn.com/problems/liang-ge-lian-biao-de-di-yi-ge-gong-gong-jie-dian-lcof/solution/shuang-zhi-zhen-fa-lang-man-xiang-yu-by-ml-zimingm/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

我的理解: 两个链表长度分别为L1+C、L2+C, C为公共部分的长度,按照楼主的做法: 第一个人走了L1+C步后,回到第二个人起点走L2步;第2个人走了L2+C步后,回到第一个人起点走L1步。 当两个人走的步数都为L1+L2+C时就两个家伙就相爱了

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution {public:ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {if (headA == nullptr || headB == nullptr) {return nullptr;}ListNode* node1 = headA;ListNode* node2 = headB;while(node1 !=node2 ){node1 = node1!=nullptr ? node1->next : headB;node2 = node2!=nullptr ? node2->next : headA;}return node1;}
};

LeetCode-剑指 Offer 52. 两个链表的第一个公共节点相关推荐

  1. 【LeetCode】剑指 Offer 52. 两个链表的第一个公共节点

    [LeetCode]剑指 Offer 52. 两个链表的第一个公共节点 文章目录 [LeetCode]剑指 Offer 52. 两个链表的第一个公共节点 一.双指针 一.双指针 设 "第一个 ...

  2. 剑指 Offer 52. 两个链表的第一个公共节点

    题目:剑指 Offer 52. 两个链表的第一个公共节点 ,哈哈,我们今天来看一道很简单的题嘛,这是选自剑指 Offer 上的一道题,好了,我们一起来看看题意吧: 考虑到直接复制题目,或者截屏的方式不 ...

  3. 【Java】剑指 Offer 52. 两个链表的第一个公共节点

    题目 :输入两个链表,找出它们的第一个公共节点. 算法思路 : 首先我们要明确,两个链表相交,是Y形状的 两个链表相交,是next域相同 因为两个单链表的长度是不一样的,所以我们需要让长的那个链表,引 ...

  4. 剑指 Offer 52. 两个链表的第一个公共节点(C语言)

    *输入两个链表,找出它们的第一个公共节点. 如下面的两个链表: 在节点 c1 开始相交. 示例 1: 输入:intersectVal = 8, listA = [4,1,8,4,5], listB = ...

  5. 【算法】剑指 Offer 52. 两个链表的第一个公共节点

    文章目录 1.概述 2. 有序 3. 循环 4. set集合 1.概述 输入两个链表,找出它们的第一个公共节点. 如下面的两个链表: 在节点 c1 开始相交.

  6. 剑指 Offer 52—— 两个链表的第一个公共节点

    题目链接:https://leetcode-cn.com/problems/liang-ge-lian-biao-de-di-yi-ge-gong-gong-jie-dian-lcof/ 输入两个链表 ...

  7. 《剑指offer》两个链表的第一个公共节点

    题目:输入两个链表,找出它们的第一个公共结点. 解析:暴力更直接.直接遍历两个链表分别存储到list1.list2,然后在list1和list2中找公共节点就好了 /* public class Li ...

  8. 剑指Offer之两个链表的第一个公共节点

    题目描述 输入两个链表,找出它们的第一个公共结点. 解题思路 首先,如果都是空链表,那么肯定返回空.两个单链表假设有公共节点,那么肯定是"Y"字型的. 先计算两个链表的长度,求出长 ...

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

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

最新文章

  1. 爱奇艺才被做空又爆裁员,技术研发为裁员重灾区
  2. php lvs,LVS(四)LVS集群DR模式
  3. Bean的生命周期——init-method和destroy-method - 通过让Bean实现InitializingBean,DisposableBean--BeanPostProcessor
  4. 过虑数字类型后面的0
  5. [翻译svg教程]svg中的circle元素
  6. LeetCode 3:无重复字符的最长子串 思考分析
  7. 自我价值感缺失的表现_不同类型的缺失价值观和应对方法
  8. VARIANT变体类型数据
  9. soul群聊显示服务器异常,soul群聊状态是什么
  10. 三极管和MOS场效应管的区别
  11. 为什么 Linux Mint 比 Ubuntu好?
  12. j2ee中如何拦截jsp页面?
  13. html游戏代码_新手使用的Mac系统的简易代码编辑器推荐
  14. linux vi 底行命令,Linux下vi命令详解
  15. python关于二手房的课程论文_python 爬虫基础-二手房信息获取为例
  16. android 蓝牙打印和网络打印
  17. 交易心得(简要总结)
  18. new className() new出来的深意
  19. SQL语句在Mysql中是如何被执行的?
  20. 如何设置自定义任务栏图标_如何为任何应用程序自定义Windows 7任务栏图标

热门文章

  1. 802.11协议精读5:隐藏终端和暴露终端
  2. PAT甲级1124 Raffle for Weibo Followers :[C++题解]哈希表、微博转发抽奖
  3. Leetcode113路径总和2
  4. C语言编程的几个小注意事项1
  5. linux cdig 工具,linux常用工具su与su -
  6. spring第五讲:aop
  7. mysql主从复制自增_关于mysql主从复制自增长列
  8. hive 时间转字符串_07697.0.3如何在Kerberos环境下用Ranger完成对Hive的行过滤及列脱敏...
  9. pandas的reindex功能
  10. python难度如何_入门Python学习难吗怎样规划学习路线