【Hot100】LeetCode—160. 相交链表

news2024/12/23 18:15:41

目录

  • 1- 思路
    • 思路
  • 2- 实现
    • ⭐160. 相交链表——题解思路
  • 3- ACM 实现


  • 原题连接:160. 相交链表

1- 思路

思路

  • 首先想要找到相交点,需要定义连个指针。两个指针一定得是同步的,例如 A 链表 [1,2,3,4,5] ,链表 B 是 [4,5]
    • 1- 指针对齐:则需要指针1 先移动,移动长度为 lenA - lenB
    • 2- 同时移动:移动指针1指针2 ,遇到相等则返回相等结点,否则返回 null

2- 实现

⭐160. 相交链表——题解思路

在这里插入图片描述

public class Solution {
    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
        ListNode nodeA = headA;
        ListNode nodeB = headB;
        int lenA = 0;
        int lenB = 0;
        while(nodeA!=null){
            lenA++;
            nodeA = nodeA.next;
        }
        while(nodeB!=null){
            lenB++;
            nodeB = nodeB.next;
        }
        if(lenB>lenA) return getIntersectionNode(headB,headA);
        nodeA = headA;
        nodeB = headB;
        // 1. 先移动第一个指针 
        for(int i = 0 ; i < lenA-lenB;i++){
            headA = headA.next;
        }
        while(headA!=null || headB!=null){
            if(headA==headB){
                return headA;
            }
            headA = headA.next;
            headB = headB.next;
        }
        return null;
    }
}

3- ACM 实现

public class getIntersectionNode {
    public static class ListNode {
        int val;
        ListNode next;
        ListNode(int x) {
            val = x;
            next = null;
        }
    }

    public static ListNode getIntersection(ListNode head1,ListNode head2){
        ListNode curA = head1;
        ListNode curB = head2;
        int len1 = 0;
        int len2 = 0;
        while(curA!=null){
            len1++;
            curA = curA.next;
        }
        while(curB!=null){
            len2++;
            curB = curB.next;
        }
        if(len1<len2) return getIntersection(head2,head1);
        // 遍历
        curA = head1;
        curB = head2;
        while (curA!=null || curB !=null){
            if(curA == curB){
                return curA;
            }
            curA = curA.next;
            curB = curB.next;
        }
        return null;
    }


    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        // 读取第一个链表的节点数量
        int n1 = sc.nextInt();
        ListNode head1 = null, tail1 = null;
        for (int i = 0; i < n1; i++) {
            int val = sc.nextInt();
            ListNode newNode = new ListNode(val);
            if (head1 == null) {
                head1 = newNode;
                tail1 = newNode;
            } else {
                tail1.next = newNode;
                tail1 = newNode;
            }
        }

        // 读取第二个链表的节点数量
        int n2 = sc.nextInt();
        ListNode head2 = null, tail2 = null;
        for (int i = 0; i < n2; i++) {
            int val = sc.nextInt();
            ListNode newNode = new ListNode(val);
            if (head2 == null) {
                head2 = newNode;
                tail2 = newNode;
            } else {
                tail2.next = newNode;
                tail2 = newNode;
            }
        }

        // 读取交点位置
        int intersectionIndex = sc.nextInt();
        if (intersectionIndex >= 0) {
            ListNode intersectionNode = head1;
            for (int i = 0; i < intersectionIndex; i++) {
                if (intersectionNode != null) {
                    intersectionNode = intersectionNode.next;
                }
            }
            if (tail2 != null) {
                tail2.next = intersectionNode;
            }
        }
        System.out.println("结果是"+getIntersection(head1,head2).val);
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2056328.html

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

相关文章

<Qt> 界面优化

目录 前言&#xff1a; 背景介绍 一、QSS基本语法 二、QSS设置方式 &#xff08;一&#xff09;指定控件样式设计 &#xff08;二&#xff09;全局样式设置 &#xff08;三&#xff09;从文件加载样式表 &#xff08;四&#xff09;Qt Designer 编辑样式 三、选择器 …

​​JVM三:JVM垃圾回收机制(GC)

1.什么是垃圾? 指的是不再使用的内存。 2.垃圾回收 将不用的内存&#xff0c;自动释放&#xff0c;解决内存泄露问题。 3.GC主要针对堆进行释放 GC是以"对象"为基本单位&#xff0c;进行回收&#xff0c;而不是字节。 垃圾回收&#xff08;GC&#xff09;主要处理三…

刑事拘留和逮捕在程序上有何区别?

1. 实施条件&#xff1a;刑事拘留是在有重大犯罪嫌疑且存在逃避侦查、串供或者其他妨碍刑事诉讼行为可能的情况下&#xff0c;由公安机关决定采取的临时剥夺人身自由的强制措施。而逮捕则是更为严厉的强制措施&#xff0c;通常在犯罪嫌疑人涉嫌的重大犯罪事实已经查清&#xff…

【贝壳找房】测试开发一面凉经--北京现场面(附面试答案)

1.单链表反转写 单链表是一种线性结构&#xff0c;它是由一个个节点&#xff08;Node&#xff09;组成的。并且每个节点&#xff08;Node&#xff09;是由一块数据域&#xff08;data&#xff09;和一块指针域&#xff08;next&#xff09;组成。 节点的数据域&#xff1a;da…

vue element-plus el-drawer 自定义抽屉标题 template slot动态标题定义方法

默认抽屉定义&#xff0c; 这里的title就是标题的定义 <el-drawer v-model"drawer" title"I am the title" :direction"direction" :before-close"handleClose" > 如果我们需要自定义这个标题&#xff0c;就需要使用slot <e…

ebpf教程(4.1):XDP程序的加载

文章目录 前言环境准备加载XDP程序源码构建过程运行 前言 前置阅读要求&#xff1a; ebpf教程(3):使用cmake构建ebpf项目-CSDN博客[译] [论文] XDP (eXpress Data Path)&#xff1a;在操作系统内核中实现快速、可编程包处理&#xff08;ACM&#xff0c;2018&#xff09;xdp-t…

Zabbix 中网络设备(交换机和防火墙)的报警信息配置指南

简述 本文介绍配置 Zabbix 以监控网络设备&#xff08;如交换机和防火墙&#xff09;并发送钉钉报警信息&#xff0c;我将提供一个详细的步骤指南。 请确保你已经完成了以下前提条件&#xff1a; 1. Zabbix 已经搭建完成。2. 网络设备&#xff08;交换机和防火墙&#xff09…

空状态设计教程:连接用户体验的桥梁

空状态设计是产品设计中常被忽视却又极其重要的一环。它不仅是用户旅程的起点&#xff0c;更是塑造第一印象的关键。本文将引导你如何使用强大的设计工具设计出既美观又实用的空状态&#xff0c;以提升用户体验。 空状态设计的意义 空状态作为用户与产品初次邂逅的界面&#…

PostgreSQL-04-入门篇-连接多张表

文章目录 1. 连接设置样例表PostgreSQL 左连接PostgreSQL 右连接PostgreSQL 全外连接 2. 表别名简介表别名的实际应用1) 对长表名使用表别名&#xff0c;使查询更具可读性2) 在连接子句中使用表别名3) 在自连接中使用表别名 3. INNER JOIN 内连接简介PostgreSQL INNER JOIN 示例…

【机器学习】正则化,欠拟合与过拟合(详细代码与图片演示!助你迅速拿下!!!)

目录 &#x1f354;欠拟合与过拟合 1.1 欠拟合与过拟合定义 1.2 通过代码认识过拟合和欠拟合 1.3 原因以及解决办法 &#x1f354;正则化 2.1 什么是正则化 2.2 正则化类别 &#x1f354;小结 学习目标 &#x1f340; 掌握过拟合、欠拟合的概念 &#x1f340; 掌握过…

黄山黄小徽光影乐园:思特科技打造沉浸式光影乐园解决方案,快乐指数拉满了!

01      「黄小徽儿童光影乐园」是由思特科技全力打造&#xff0c;依托行业领先的数字光影技术与交互科技&#xff0c;专为3-8岁儿童设计的全场景、全交互、全沉浸的沉浸式光影乐园解决方案。    沉浸式光影乐园解决方案-黄小徽儿童光影乐园      02      思特…

无人机之固定翼无人机的组成

固定翼无人机是根据空气动力学原理设计机翼的形状&#xff0c;靠动力装置产生推力或者拉力&#xff0c;使无人机获得一定速度后&#xff0c;会导致空气在飞机上下表面的压力不同&#xff0c;进而产生升力&#xff0c;其升力主要来源于固定的机翼。大多数都是由机翼、机身、尾翼…

ultralytics实例分割mask读取

在前面学习YOLOv8的实例分割过程中&#xff0c;需要使用实例分割的数据集&#xff0c;其标签的标注格式如下&#xff1a; 实例分割勾勒轮廓 其中&#xff0c;第一个数字代表的是类别编号&#xff0c;后面的数据代表的是标注的坐标&#xff08;转换到0-1之间&#xff09;每两个…

编程修炼之Hibernate--- springboot启动初始化ddl过程与如何自定义修改 table 字段长度

文章目录 springboot启动初始化ddl过程如何自定义修改 table springboot启动初始化ddl过程 跟踪Springboot整合hibernate的启动代码&#xff1a; SessionFactoryImpl 的初始化里做了非常多的事情&#xff0c;初始化各种资源&#xff0c;并调用 SchemaManagementToolCoordinat…

c语言基础--------字符串指针

在 C 语言中&#xff0c;字符串指针是一个指向字符类型的指针&#xff0c;通常用于指向字符串的第一个字符。字符串在 C 语言中通常表示为字符数组&#xff0c;而字符串指针则是用来存储这种字符数组首地址的变量。 定义字符串指针 字符串指针的定义方式如下&#xff1a; ch…

Android更改包名和签名

一、更改包名 1、包名——鼠标右键——Refactor——Rename 修改自己想更改的包名和选择更改范围后点击Refactor就可以了 2.手动修改app的build.gradle文件中的applicationId&#xff08;改成和我们之前修改的包名相同&#xff09; 3.修改AndroidManifest.xml文件中的packag…

“AI+Security”系列第2期(三):面向LLM(大语言模型)的漏洞挖掘与对齐防御研究

近日&#xff0c;由安全极客、Wisemodel 社区和 InForSec 网络安全研究国际学术论坛联合主办的“AISecurity”系列第 2 期——对抗&#xff01;大模型自身安全的攻防博弈线上活动如期举行。 在此次活动中&#xff0c;前阿里云高级安全专家郑瀚带来了以《通往LLM安全对齐的道路…

网易云音乐故障 2 小时,这次到底谁背锅?(今天记得领补偿)

大家好&#xff0c;我是程序员鱼皮&#xff0c;8 月 19 日下午&#xff0c;网易云音乐突发严重故障&#xff0c;并登顶微博热搜&#xff0c;跟黑神话悟空抢了热度。 根据用户的反馈&#xff0c;故障的具体表现为&#xff1a;用户无法登录、歌单加载失败、播放信息获取失败、无法…

SQL— DML语句学习【后端 10】

数据库操作-DML 详解 在数据库管理系统中&#xff0c;DML&#xff08;Data Manipulation Language&#xff0c;数据操作语言&#xff09;扮演着至关重要的角色&#xff0c;它负责对数据库中的数据进行增、删、改操作。掌握DML操作对于数据库的日常维护和管理至关重要。本文将详…

CSP 2023 普及组第一轮 - CSP/S 2023初试题 完善程序第二题解析

一、题目阅读 &#xff08;编辑距离&#xff09;给定两个字符串&#xff0c;每次操作可以选择删除&#xff08;Delete&#xff09;、插入&#xff08;Insert&#xff09;、替换&#xff08;Replace&#xff09;&#xff0c;一个字符&#xff0c;求将第一个字符串转换为第二个字…