给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。

图示两个链表在节点 c1 开始相交:

题目数据 保证 整个链式结构中不存在环。

注意,函数返回结果后,链表必须 保持其原始结构 。

  • 示例 1:

输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3
输出:Intersected at ‘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
输出:Intersected at ‘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 。

解题思路

将链表分为两段,一段为相交前的a,b不同的两段,一段是相交后的c段

因此在链表a指针移动到链表a末尾时,就将指针移动到链表b的开头。链表b也是同理

这时指针a和指针b走过的路程均为a+b+c,这就是他们的交点。如果没有交点的话,他们的路程就是a+b,并且两个指针最后指向两个链表的末尾

代码

/*** Definition for singly-linked list.* type ListNode struct {*     Val int*     Next *ListNode* }*/
func getIntersectionNode(headA, headB *ListNode) *ListNode {oa,ob:=headA,headBfor headB!=headA {if headA==nil{headA=ob}else {headA=headA.Next}if headB==nil{headB=oa}else{headB=headB.Next}}return headA}

leetcode 160. 相交链表(双指针)相关推荐

  1. Leetcode 160.相交链表

    难度:简单 频率:140 题目 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点.如果两个链表不存在相交节点,返回 null . 解题方法:双指针遍历 解题 ...

  2. [leetcode] 160.相交链表

    给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点.如果两个链表没有交点,返回 null . 图示两个链表在节点 c1 开始相交: 题目数据 保证 整个链式结 ...

  3. Leetcode 160. 相交链表 解题思路及C++实现

    解题思路: 先将两个链表构建成一个环,定义两个快慢指针,当它们相遇时,将fast指针从头结点往后遍历,每次走一步,当这两个指针再次相遇时,该节点就是相交节点. /*** Definition for ...

  4. Leetcode 160 相交链表 (每日一题 20210802)

    给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点.如果两个链表没有交点,返回 null .图示两个链表在节点 c1 开始相交:题目数据 保证 整个链式结构中 ...

  5. [leetcode]160.相交链表

    给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点.如果两个链表没有交点,返回 null . 图示两个链表在节点 c1 开始相交: 题目数据 保证 整个链式结 ...

  6. LeetCode 160. 相交链表

    文章目录 1. 题目信息 2. 解题 2.1 计算长度 2.2 交替遍历 1. 题目信息 编写一个程序,找到两个单链表相交的起始节点. <剑指Offer>同题:面试题52. 两个链表的第一 ...

  7. LeetCode 160. 相交链表(c++实现)

    思路 统计两个链表的长度,并记录两个链表尾结点,判断是否相同. 比较链表长度,让较长的链表走|lenA-lenB|步数,使得两个俩表剩余部分长度相等 两个链表一起走,走到相同节点,即相交节点. 实现 ...

  8. 【Leetcode】拿捏链表(四)——160. 相交链表、141. 环形链表、142. 环形链表 II

    作者:一个喜欢猫咪的的程序员 专栏:<Leetcode> 喜欢的话:世间因为少年的挺身而出,而更加瑰丽.                                  --<人民 ...

  9. LeetCode Algorithm 160. 相交链表

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

最新文章

  1. Sublime Text 自动换行
  2. es中的DiscoveryModule
  3. Docker入门简介
  4. Solr-4.10.2安装
  5. 文献记录(part58)--不平衡数据处理的新方法一基于样本相似度的少数合成法
  6. Mysql-my-innodb-heavy-4G.cnf配置文件注解
  7. 阿里达摩院青橙奖“硬核10人”出炉,钟南山寄语青年科学家
  8. pandas.DataFrame的pivot()和unstack()实现行转列
  9. Sharding-Proxy读写分离_Sharding-Sphere_分库分表_读写分离_工作笔记021
  10. ANDROID L——Material Design详解(UI控件)
  11. 不显示藏宝阁试穿服务器,梦幻西游:藏宝阁试穿功能的妙用,无限回档测试
  12. 客户端用java api 远程操作HDFS以及远程提交MR任务(源码和异常处理)
  13. cadence的PCB封装库导入Altium designer
  14. RuntimeError: ./xxx.pth is a zip archive (did you mean to use torch.jit.load()?)
  15. 黑马python培训视频网盘下载
  16. 在书的侧面(包括书口、书顶<上切口>、书根<下切口>)写的字如何去除
  17. 华为重启交换机命令_华为交换机常用命令
  18. 使用opencv测量点到线的距离
  19. 台式计算机如何拆硬盘,台式机硬盘如何拆卸
  20. 华为鸿蒙理性,华为的理性 鸿蒙的节奏

热门文章

  1. 【Verilog HDL】第三章 reg和net及其一组类型的区别——充分运用实验思维
  2. Linux之文件通信
  3. 函数sigsetjump和siglongjump
  4. java基础教程第三版耿祥义,后台开发JAVA岗
  5. java将数组中的数据修改,深度集成!
  6. CSS清除默认样式,聪明人已经收藏了!
  7. 最全的BAT大厂面试题整理,系列篇
  8. linux安装日志切割程序
  9. 线段树(区间更改,区间查最值)模板
  10. Java DES 加解密(DES/CBC/PKCS5Padding)