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

在节点 c1 开始相交。

输入: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 个节点。

输入: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 个节点。

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

java代码:

解题思路:
方法1.我们通常做这种题的思路是设定两个指针分别指向两个链表头部,一起向前走直到其中一个到达末端,另一个与末端距离则是两链表的 长度差。再通过长链表指针先走的方式消除长度差,最终两链表即可同时走到相交点。

方法2.换个方式消除长度差: 拼接两链表。
设长-短链表为 C,短-长链表为 D (分别代表长链表在前和短链表在前的拼接链表),则当 C 走到长短链表交接处时,D 走在长链表中,且与长链表头距离为 长度差;

以下图片帮助理解:当 ha == hb 时跳出,返回即可

public class Solution {public ListNode getIntersectionNode(ListNode headA, ListNode headB) {ListNode ha = headA, hb = headB;while (ha != hb) {ha = ha != null ? ha.next : headB;hb = hb != null ? hb.next : headA;}return ha;}
}

转载于:https://www.cnblogs.com/fightingcode/p/11619144.html

leetcode-160-相交链表(simple)相关推荐

  1. Leetcode 160.相交链表

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

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

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

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

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

  4. [leetcode]160.相交链表

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

  5. [leetcode] 160.相交链表

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

  6. leetcode 160. 相交链表(双指针)

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

  7. LeetCode 160. 相交链表

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

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

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

  9. 【LeetCode】【HOT】160. 相交链表

    [LeetCode][HOT]160. 相交链表 文章目录 [LeetCode][HOT]160. 相交链表 package hot;class ListNode{int val;ListNode n ...

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

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

最新文章

  1. Hessian 初探
  2. vc 控制台添加托盘显示_开源:ESP8266读DHT11温湿度,小程序实时显示
  3. 5场直播丨PostgreSQL、openGauss、Oracle、GoldenDB、EsgynDB
  4. 《openstack-nova》use-novaclient 创建虚拟机(createvms.py)
  5. Python3—元组
  6. 给客户寄荔枝很好,开展新业务更重要
  7. GD32 MCU USB开发学习记录
  8. 电商平台接入手机支付宝支付(服务商授权模式,可直接付款给卖家)
  9. OSPF的DR和BDR【eNSP实现】
  10. 人脸识别中怎么区分人脸和照片
  11. iOS 打开AppStore指定app下载页
  12. Android Studio之Error:(158) Error: Expected resource of type id [ResourceType]
  13. 一文搞懂CAN FD总线协议帧格式
  14. 编程训练-求矩阵乘积
  15. win10定时关机c语言,小编为你win10系统通过命令实现定时关机的步骤
  16. Android Studio项目中常见的需要自行创建的资源文件夹的位置(assets、raw、menu、anim等)
  17. 【bzoj4712】洪水(dp,树剖)
  18. 【Matlab】Matlab导入多个.mat文件并画图的过程详解
  19. UES:地域有界,资产无国界
  20. es文件浏览器怎么开ftp服务器,es文件浏览器怎么开ftp服务器

热门文章

  1. 伦理困境:人工智能浪潮与“AI威胁论”之争
  2. Go 学习笔记(59)— Go 第三方库之 etcd/clientv3 封装为方法使用(建立连接、设置key-value、获取key-value、获取带前缀的key-value)
  3. ImportError: No module named tensorflow.compat.v1 忽略已经安装的某个包版本 忽略已安装版本...
  4. Android数据持久化:SharePreference
  5. ONNX 实时graph优化方法
  6. 操作系统常用词典(二)
  7. Camera Calibration 相机标定
  8. Thrift的服务器和客户端Python案例
  9. Taylayout 底部的滑动线高度设置
  10. The destination folder does not exist or is not writeable