编写一个程序,找到两个单链表相交的起始节点。

如下面的两个链表:

在节点 c1 开始相交。

示例 1:

输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3
输出:Reference of the node with value = 8
输入解释:相交节点的值为 8 (注意,如果两个链表相交则不能为 0)。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,0,1,8,4,5]。在 A 中,相交节点前有 2 个节点;在 B 中,相交节点前有 3 个节点。

示例 2:

输入:intersectVal = 2, listA = [0,9,1,2,4], listB = [3,2,4], skipA = 3, skipB = 1
输出:Reference of the node with value = 2
输入解释:相交节点的值为 2 (注意,如果两个链表相交则不能为 0)。从各自的表头开始算起,链表 A 为 [0,9,1,2,4],链表 B 为 [3,2,4]。在 A 中,相交节点前有 3 个节点;在 B 中,相交节点前有 1 个节点。

示例 3:

输入:intersectVal = 0, listA = [2,6,4], listB = [1,5], skipA = 3, skipB = 2
输出:null
输入解释:从各自的表头开始算起,链表 A 为 [2,6,4],链表 B 为 [1,5]。由于这两个链表不相交,所以 intersectVal 必须为 0,而 skipA 和 skipB 可以是任意值。
解释:这两个链表不相交,因此返回 null。

注意:

如果两个链表没有交点,返回 null.
在返回结果后,两个链表仍须保持原有的结构。
可假定整个链表结构中没有循环。
程序尽量满足 O(n) 时间复杂度,且仅用 O(1) 内存。

思路:若长的链表长度为m,短的链表长度为n,m>n,那么先让长的链表走m-n步,然后再和短的链表一起走,直到相遇或者一起走到结尾,然后返回。下面这段代码比较取巧,不用考虑谁长谁短的问题,交换着来就行,不过核心思想都是我上面说的了。

/*** 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==NULL || headB==NULL)return NULL;ListNode* she = headA;ListNode* he = headB;while(she!=he){she = she==NULL?headB:she->next;he = he==NULL?headA:he->next;}return she;}
};

相交链表—leetcode160相关推荐

  1. Leetcode160. 相交链表

    Leetcode160. 相交链表 题目: 编写一个程序,找到两个单链表相交的起始节点. 示例 1: 输入:intersectVal = 8, listA = [4,1,8,4,5], listB = ...

  2. 47 - 算法 - Leetcode-160 -相交链表

    // 链表对齐 - 160 相交链表class Solution {public:ListNode *getIntersectionNode(ListNode *headA, ListNode *he ...

  3. 【每日一算法】相交链表

    微信改版,加星标不迷路! 每日一算法 - 相交链表 编写一个程序,找到两个单链表相交的起始节点. 如下面的两个链表: 在节点 c1 开始相交. 示例 1: 输入:intersectVal = 8, l ...

  4. 《LeetCode力扣练习》第160题 相交链表 Java

    <LeetCode力扣练习>第160题 相交链表 Java 一.资源 题目: 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点.如果两个链表不存 ...

  5. leetcode 160 简单难度 相交链表

    160. 相交链表 编写一个程序,找到两个单链表相交的起始节点. 如下面的两个链表: 在节点 c1 开始相交. 输入:intersectVal = 8, listA = [4,1,8,4,5], li ...

  6. 文巾解题 160. 相交链表

    1 题目描述 2 解题思路 2.1 哈希表 遍历listA,把每个节点(以及后继节点)放入一个list中.遍历完A之后遍历B,如果B的某个节点(以及后继节点)在这个list中,那么我们就找到了相交的部 ...

  7. LeetCode-链表-160. 相交链表

    160. 相交链表 思路一:使用set用到了额外的内存,没有达到题目要求 /*** Definition for singly-linked list.* struct ListNode {* int ...

  8. python 相交链表

    |相交链表 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点.如果两个链表不存在相交节点,返回 null . 图示两个链表在节点 c1 开始相交: 题目数据 ...

  9. LeetCode Algorithm 160. 相交链表

    160. 相交链表 Ideas 这题之前左神算法课的时候也讲过,那是一个带环的相交链表,不过原理都是一样的. 双指针,a指针先沿着headA开始走,走到头之后开始沿着headB继续走,b指针先沿着he ...

最新文章

  1. 11个优秀的Android开发开源项目
  2. Design Pattern - Abstract Factory(C#)
  3. java poi 如何合并多个sheet 为一个sheet_Java POI组件实现多个Excel文件整合成一个多Sheet的Excel文件...
  4. hdu 1568 Fibonacci 对数。。
  5. 【渝粤教育】广东开放大学 土木工程材料 形成性考核 (22)
  6. 浅谈shell中的clear命令实现
  7. 工作篇-佛山三水恒大-2020.10.23
  8. 真格量化-隐含波动率购买
  9. 我们出了套西游记考题,可以保证吴承恩不及格
  10. SecureCRT 免安装、绿色版、免费版本
  11. 基于springboot的社区物业管理系统(完美运行,包含数据库源代码,可完美运行)
  12. pdf如何去除保护限制,pdf复制打印限制怎么解除?
  13. CISSP知识点汇总(已完结并通过考试)
  14. 【干货分享】硬件测试工程师必备基本技能,看这一篇就够!
  15. 高可靠环境 FileNet 系统介绍和应用实例
  16. 快手爬虫 解决粉丝数 关注数等字体加密 python快手爬虫
  17. 122全国交通安全日
  18. unraid虚拟linux系统,UNRAID教程:3分钟 用unraid自带的虚拟机 安装 黑群晖NAS DSM系统 很强大!...
  19. 一寸等于多少厘米,一寸照片尺寸是多少?
  20. 光遇服务器修复时间,光遇:测试服调整,瞬间Bug被修复?几家欢喜几家愁

热门文章

  1. 文件内容批量修改工具
  2. 轻量级ORM框架——第二篇:Dapper中的一些复杂操作和inner join应该注意的坑
  3. Android驱动开发之Hello实例
  4. 《训练指南》——8.5
  5. 设计模式之: 装饰器模式
  6. 用 DomIt! XML 处理工作
  7. JPEG原理分析及JPEG解码器的调试
  8. [Python爬虫] scrapy爬虫系列 一.安装及入门介绍
  9. HarmonyOS之常用布局AdaptiveBoxLayout的使用
  10. iOS之深入解析类Class的底层原理