相交链表Java

news2025/9/21 9:14:45

给你两个单链表的头节点 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;
        }

        @Override
        public 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.coloradmin.cn/o/1085859.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

元宇宙虚拟展厅:沉浸式体验、个性化互动、全新展示

近年来&#xff0c;大多数企业开始注重线上虚拟展厅的搭建&#xff0c;元宇宙虚拟展厅也为众多企业创造了更多有趣的体验&#xff0c;为商企带来了全新的宣传方式。相对于传统展厅而言&#xff0c;元宇宙虚拟展厅在场景真是复刻的基础上&#xff0c;做到了超越真实。 传统展厅的…

关于网络协议的若干问题(三)

1、当发送的报文出问题的时候&#xff0c;会发送一个 ICMP 的差错报文来报告错误&#xff0c;但是如果 ICMP 的差错报文也出问题了呢&#xff1f; 答&#xff1a;不会导致产生 ICMP 差错报文的有&#xff1a; ICMP 差错报文&#xff08;ICMP 查询报文可能会产生 ICMP 差错报文…

核心期刊发布通知:养育三孩家庭作者免收版面费!(附免收期刊盘点)

免收版面费通知 近日&#xff0c;中文核心期刊《财会通讯》在其官方微信平台发布通知《关于对养育三孩家庭的作者免收版面费的通知》。 图源&#xff1a;《财会通讯》官方微信平台 通知称&#xff1a;为落实党的二十大报告中关于“优化人口发展战略&#xff0c;建立生育支持…

如何在STM32中实现TCP通信?

如何在STM32中实现TCP通信&#xff1f; TCP通信在计算机网络中扮演着重要角色&#xff0c;实现它需要兼顾硬件和软件因素。 硬件层面&#xff0c;某些STM32处理器内置了Ethernet MAC&#xff0c;这有利于简化网络通信的部署。若处理器缺乏内置MAC&#xff0c;需外接以太网控制…

22字符串-简单反转

目录 BM&#xff08;Boyer-Moore&#xff09; 坏字符 好后缀 什么情况用哪个规则&#xff1f; LeetCode之路——151. 反转字符串中的单词 分析: 字符串匹配中除了简单的BF&#xff08;Brute Force&#xff09;、RK&#xff08;Rabin-Karp&#xff09;算法&#xff0c;还有…

物业巡检系统能做什么?物业服务如何提升管理效率?

随着科技的快速发展&#xff0c;物业管理行业也在寻求着更加高效、智能化的解决方案&#xff0c;以应对日益复杂的设备和环境巡检上的需求。目前传统的纸质巡检方式已经无法满足现代物业管理的要求&#xff0c;“的修”工单管理系统应运而生&#xff0c;它通过数字化、智能化的…

软件成果鉴定测试应该怎么做?对软件产品起到什么作用?

软件成果鉴定测试是指对一个软件产品进行全面、系统的测试&#xff0c;以评估其是否符合预期的要求、是否满足特定的标准和规范。该测试旨在发现和解决软件产品中的缺陷和问题&#xff0c;确保其质量和可靠性。 一、软件成果鉴定测试包括以下内容   1、需求分析&#xff1a;…

ctfshow-ssti

web361 名字就是考点&#xff0c;所以注入点就是name 先测试一下存不存在ssti漏洞 利用os模块&#xff0c;脚本 查看一下子类的集合 ?name{{.__class__.__base__.__subclasses__()}} 看看有没有os模块&#xff0c;查找os 利用这个类&#xff0c;用脚本跑他的位置 import …

【USRP】NI PCIe-8371

什么是 NI PCIe-8371 PXI远程控制设备。 x4 Gen1 PCI Express主机&#xff0c;832 MB/s&#xff0c;铜缆MXI-Express设备&#xff0c;用于PXI远程控制—PCIe‑8371是一款MXI‑Express远程控制器&#xff0c;用于控制通过有线PCI连接到计算机PCI Express插槽的设备或系统。 当…

oracle手工创建数据库?稳健一文

一、描述 新加了一块盘做手工创建数据库的数据文件目录 oradata&#xff1b; 这台服务器上本来就有一个单机asm数据库&#xff0c;我内存不够先关闭了 二、手工创建oracle数据库 1、设置ORACLE_SID [oracleoomcserver ~]$ cp .bash_profile .bash_profile_omccdb [oracleoomc…

再谈Java泛型

一.类型参数的约束 我们可以对泛型传进来的参数做一些约束&#xff0c;比如说 用extends表明传进来的参数类型必须是必须是某个类型的子类型或者本身 当然也可以用接口约束&#xff0c;也是用extends表明传进来的参数类型必须实现某个接口。用&连接&#xff0c;注意class…

SpringBoot-黑马程序员-学习笔记(四)

40.业务层Service的快速开发 1.写业务层接口并且继承IService类&#xff0c;泛型是对应的实体类 2.写实现类&#xff0c;除了和之前一样的实现Service类外&#xff0c;还要继承ServiceImpl类&#xff0c;泛型有2个&#xff0c;第一个是对应的Dao层&#xff0c;第2个是对应的实…

深入解析Spring Cloud Gateway的GlobalFilter

文章目录 摘要引言GlobalFilter的作用使用GlobalFilter默认的GlobalFilter自定义GlobalFilter 示例代码配置GlobalFilter配置文件方式代码方式 高级用法&#xff1a;重写GlobalFilter思路代码实现 结论参考文献 摘要 本文将详细介绍Spring Cloud Gateway中的GlobalFilter&…

一文理清JVM结构

JVM结构介绍 JVM一共分为三个组成部分: 1 类加载子系统 主要是将class文件加载到内存中的一个系统&#xff0c;其核心组件是类加载器 2 运行时数据区子系统 1 JVM私有部分 1 虚拟机栈 描述的是Java方法执行的内存模型&#xff1a;每个方法在执行的同时都会创建一个栈帧&…

语言模型编码中/英文句子格式详解

文章目录 前言一、Bert的vocab.txt内容查看二、BERT模型转换方法(vocab.txt)三、vocab内容与模型转换对比四、中文编码总结 前言 最近一直在学习多模态大模型相关内容&#xff0c;特别是图像CV与语言LLM模型融合方法&#xff0c;如llama-1.5、blip、meta-transformer、glm等大…

程序员如何用海外平台接单?

作为一名能力超群的码农&#xff0c;基本工资肯定是到位的。 那你是否想过锦上添花&#xff0c;试着找找兼职呢&#xff1f; 相信不少人已经在接单平台上接单了&#xff0c; 但是&#xff0c;在众多接单平台中&#xff0c;海外平台是个什么样的存在呢&#xff1f;怎么在海外…

c/c++--编译指令(预处理之后) #pragma

1. #pragma 作用 #pragma 用于指示编译器完成一些特定的动作#pragma 的功能或作用 随编译器不同而变化。 即 不同的编译器可能以不同的方式解释同一条 #pragma 指令 2. 用法 常见用法示例 2.1 #pragma message 参考链接 自定义编译信息输出到终端(一般和#if配合使用&#…

收银系统商品定价设计思考

一、背景 因为门店系统里商品总共也就几万款&#xff0c;一直以来都是根据条码由总部统一定价销售&#xff0c;现在有加盟店&#xff0c;各门店也有进行各自促销活动的需求&#xff0c;这就需要放开门店自主定价权&#xff0c;所以近段时间系统在商品定价上做了扩展。 二、商…

【Debian系统】:安装debian系统之后,很多命令找不到,需要添加sudo之后才能使用,以下解决方法

项目场景&#xff1a; 问题描述 解决方案&#xff1a; 1.临时解决方案 2.永久解决方案 1.首先打开编辑&#xff1a; 2.打开之后最后一行添加代码&#xff1a; 3.最后运行一遍 .bashrc 4.已经可以了&#xff0c;可以试试reboot&#xff0c;重启一下机子 一点一滴才能成长 …

基于SpringBoot的城镇保障性住房管理系统

目录 前言 一、技术栈 二、系统功能介绍 用户信息管理 房屋类型管理 房源信息管理 房源申请管理 住房分配 房源申请 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上…