当前位置: 首页 > news >正文

相交链表Java

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

以下有两种解决方法:

  • 一种是用Map,利用其key值唯一的方法去判断(也可以使用set,set在add时,已存在的元素会返回false,不存在的返回true),但是此种方法会导致额外的空间消耗;
  • 另外一种是利用双指针,获取两个链表中的长度,将最长的起始部位和最短的起始部分相等,一起遍历.
    static class ListNode{private int val;private ListNode node;public ListNode(int val, ListNode node) {this.val = val;this.node = node;}@Overridepublic String toString() {return "ListNode{" +"val=" + val +", node=" + node +'}';}}public static void main(String[] args) {ListNode node5 = new ListNode(5, null);ListNode node4 = new ListNode(4, node5);ListNode node3 = new ListNode(3, node4);ListNode node2 = new ListNode(2, node3);ListNode node1 = new ListNode(1, node2);ListNode head3 = new ListNode(3, node3);ListNode head2 = new ListNode(2, head3);ListNode head1 = new ListNode(1, head2);System.out.println("相交链表元素为:" + getIntersectionNode(head1, node1));System.out.println("相交链表元素为:" + getIntersectionNode2(head1, node1));}//相交链表private static ListNode getIntersectionNode(ListNode headA, ListNode headB) {if (headA == null || headB == null) {return null;}int a = 0, b = 0, c = 0;ListNode nodea = headA, nodeb = headB;while (nodea != null) {a++;nodea = nodea.node;}while (nodeb != null) {b++;nodeb = nodeb.node;}nodea = headA;nodeb = headB;if (a < b) {c = b - a;for (int i = 0; i < c; i++) {nodeb = nodeb.node;}} else {c = a - b;for (int i = 0; i < c; i++) {nodea = nodea.node;}}while (nodea != null && nodeb != null) {if (nodea == nodeb)return nodea;nodea = nodea.node;nodeb = nodeb.node;}return null;}private static ListNode getIntersectionNode2(ListNode headA, ListNode headB) {Map<ListNode, Integer> map = new HashMap<>();while (headA != null) {map.put(headA, headA.val);headA = headA.node;}while (headB !=null) {if (map.containsKey(headB)){return headB;}headB = headB.node;}return null;}

相交链表元素为:ListNode{val=3, node=ListNode{val=4, node=ListNode{val=5, node=null}}}
相交链表元素为:ListNode{val=3, node=ListNode{val=4, node=ListNode{val=5, node=null}}}

【LeetCode-160】相交链表_哔哩哔哩_bilibili

http://www.lryc.cn/news/190224.html

相关文章:

  • 第二章:OSI参考模型与TCP/IP模型
  • 知识图谱04——openGL与ubuntu22.04
  • 如何看待为了省小钱而花费时间
  • Maven Eclipse
  • Linux:redis集群(3.*版本 和 5.*版本)搭建方法
  • 正则表达式基础语法
  • 数据库常见面试题--MySQL
  • Springboot 集成 Redis集群配置公网IP连接报私网IP连接失败问题
  • 解决方案 | 法大大电子签精准击破销售场景签约难题
  • ARM按键中断控制事件
  • 微信小程序之本地生活(九宫格)
  • 【Linux 安装Kibana 及 Es 分词器安装】
  • python-arima模型statsmodels库实现-有数据集(续)-statsmodels-0.9.0版本
  • JVM源码剖析之线程的创建过程
  • ansible的介绍安装与模块
  • el-form简单封装一个列表页中的搜索栏
  • 【Python 2】列表 模式匹配 循环 dict set 可变对象与不可变对象
  • 深度学习—cv动物/植物数据集
  • 高效团队协作软件推荐:提升工作效率的优选方案!
  • Mac中使用virtualenv和virtualenvwrapper
  • wpf webBrowser控件 常用的函数和内存泄漏问题
  • AI游戏设计的半年度复盘;大模型+智能音箱再起波澜;昇思大模型技术公开课第2期;出海注册经验分享;如何使用LoRA微调Llama 2 | ShowMeAI日报
  • 多线程 - 锁策略 CAS
  • VP记录——The 2021 CCPC Weihai Onsite
  • JavaWeb---Servlet
  • 英语——方法篇——单词——谐音法+拼音法——50个单词记忆
  • 35道Rust面试题
  • 01 时钟配置初始化,debug
  • Halcon我的基础教程(一)(我的菜鸟教程笔记)-halcon仿射变换(Affine Transformation)的探究与学习
  • c++视觉---中值滤波处理