面试题 链表相交 -剑指offer简单

news2024/9/30 17:34:57

面试题 链表相交
题目链接
给你两个单链表的头节点 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 。

提示:

listA 中节点数目为 m
listB 中节点数目为 n
0 <= m, n <= 3 * 10^4
1 <= Node.val <= 10^5
0 <= skipA <= m
0 <= skipB <= n
如果 listA 和 listB 没有交点,intersectVal 为 0
如果 listA 和 listB 有交点,intersectVal == listA[skipA + 1] == listB[skipB + 1]

进阶:你能否设计一个时间复杂度 O(n) 、仅用 O(1) 内存的解决方案?

解题思路1

  • 先计算出两个链表长度lenA和lenB
  • 让长度较长的一方先走abs(lenA-lenB)步
  • 然后两个链表同时向前走即可

解题思路2

  • 利用lenA+lenB=lenB+lenA的思想
  • 如果链表A为空,那么让链表A等于链表B
  • 如果链表B为空,那么让链表B等于链表A
  • 你走我的路,我走你的路,如果有交点最终必定可以相遇。

代码1

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
        ListNode* tempA = headA;
        int lenA = 0;
        while(tempA!=NULL){
            lenA++;
            tempA=tempA->next;
        }

        ListNode* tempB = headB;
        int lenB = 0;
        while(tempB!=NULL){
            lenB++;
            tempB=tempB->next;
        }

        int dis = abs(lenA-lenB);
        while(dis>0){
            dis--;
            lenA>lenB?headA=headA->next:headB=headB->next;
        }

        while(headA!=headB){
            headA = headA->next;
            headB = headB->next;
        }
        return headA;

    }
};

代码2

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
        ListNode* tempA=headA;
        ListNode* tempB=headB;
        while(tempA!=NULL&&tempB!=NULL){
            if(tempA==tempB)return tempA;
            if(tempA->next==NULL&&tempB->next==NULL)return NULL;
            tempA = tempA->next==NULL?headB:tempA->next;
            tempB = tempB->next==NULL?headA:tempB->next;
        }
        return NULL;

    }
};

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

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

相关文章

DIY生日蛋糕笔记

自制6寸生日蛋糕笔记 实验环境&#xff1a; 长帝CRTF32PD搪瓷烤箱32升&#xff0c; 九阳电动打蛋器&#xff0c; 裱花盘一套 蛋糕盒子 称重器 硅胶刀 两个大碗1号和2号。 材料&#xff1a; 参考&#xff1a; https://www.bilibili.com/video/BV1t34y1Z7mL/?spm_id_from333…

揭开苹果供应链,如何将其命运与中国深度捆绑

前 言 诺基亚在2007年时拥有9亿用户&#xff0c;在手机市场上占据主导地位&#xff0c;福布斯在当时以“谁能赶上手机之王&#xff1f;”为标题刊登了一篇关于该公司的报道&#xff0c;与此同时&#xff0c;苹果公司推出了iPhone系列产品。16年后&#xff0c;苹果公司以充足的…

如何解锁华为手机PIN/图案/指纹/人脸锁?

您的手机存储主要数据&#xff0c;因此为您的设备设置安全代码让您高枕无忧。屏幕和生物识别锁可在手机丢失时保护您的手机&#xff0c;并使其在被盗时无法访问。每次您需要密码来解锁手机时&#xff0c;但如果您被锁在密码之外怎么办&#xff1f; 今天的话题将独家帮助华为用…

ChatGPT引发的新一轮网络安全威胁,要如何应对?

近期随着美国ChatGPT横空出世&#xff0c;沉寂一时的人工智能领域再次掀起波澜&#xff0c;引起社会的广泛关注&#xff0c;仅在短短数月内&#xff0c;ChatGPT的注册用户就超过数亿。作为一款免费的聊天机器人&#xff0c;它几乎可以回答任何问题。和搜索引擎不同的是&#xf…

JavaSE 文件内容的读写

读文件和写文件有俩种风格的操作&#xff08;俩组不同的类&#xff09; 字节流 InputStream&#xff08;负责读&#xff09;/ OutputStream &#xff08;负责写&#xff09;~~针对二进制文件进行读写&#xff0c;操作基本单位是字节。字符流 Reader(负责读&#xff09;/ Write…

vue初识

第一次接触vue&#xff0c;前端的html,css,jquery,js学习也有段时间了&#xff0c;就照着B站的视频简单看了一些&#xff0c;了解了一些简单的用法&#xff0c;这边做一个记录。 官网 工具&#xff1a;使用VSCode以及Live Server插件&#xff08;能够实时预览&#xff09; 第…

【龙芯1B】:LCD显示图片文字背景色前景色、小创语音控制lcd显示、数码管倒计时

项目场景&#xff1a; 闲来无事&#xff0c;写了几个关于嵌入式技能大赛的任务。希望对大家有所帮助。本文开发板由百科荣创的龙芯1b开发板支持&#xff0c;关于嵌入式技能大赛的开发板。 LCD显示图片&文字&背景色&前景色小创语音控制lcd显示数码管倒计时LCD显示图…

创建自己的脚手架(一)

创建自己的脚手架 脚手架基本框架 使用pnpm init 创建环境 取一个自己喜欢的名字 这里叫gucli 生成 package.json文件的内容 {"name": "gucli","version": "1.0.0","description": "","main": "…

【JavaSE】Java9Java10Java11新特性(687~717)

687.复习&#xff1a;动态代理 688.复习&#xff1a;Lambda表达式 689.复习&#xff1a;函数式接口 690.复习&#xff1a;方法引用与构造器引用 691.复习&#xff1a;Stream API 692.复习&#xff1a;Optional类的使用 693.jdk版本更新说明 JDK 9 的发布 经过4次跳票&#x…

Leetcode力扣秋招刷题路-0074

从0开始的秋招刷题路&#xff0c;记录下所刷每道题的题解&#xff0c;帮助自己回顾总结 74. 搜索二维矩阵 编写一个高效的算法来判断 m x n 矩阵中&#xff0c;是否存在一个目标值。该矩阵具有如下特性&#xff1a; 每行中的整数从左到右按升序排列。 每行的第一个整数大于前…

《MySQL学习》 事务的隔离

一.快照读与当前读 众所周知,MySQL默认的隔离级别为可重复读&#xff08;RR&#xff09;&#xff0c;开启一致性视图后&#xff0c;事务提交前后数据都是不变的。 事务 T 启动的时候会创建一个视图 read-view&#xff0c;之后事务 T 执行期间&#xff0c;即使有其他事务修改了…

数值卡,让数据可视化玩出新花样丨三叠云

数值卡 路径 仪表盘 >> 仪表盘设计 功能简介 1. 数值卡增加「数值标题」、「图标」、「进度条」功能&#xff0c;使得应用场景更为广泛&#xff0c;实现数据可视化&#xff0c;让用户能够轻松地获取、处理信息。 2.「数据模型」支持0个维度1个指标、1个维度1个指标。…

EMC简介(文末有易灵思核心板)

EMC测试又叫做电磁兼容&#xff08;EMC&#xff09;&#xff0c;指的是对电子产品在电磁场方面干扰大小&#xff08;EMI&#xff09;和抗干扰能力&#xff08;EMS&#xff09;的综合评定&#xff0c;是产品质量最重要的指标之一&#xff0c;电磁兼容的测量由测试场地和测试仪器…

嵌入式Linux文件系统的介绍

学习Linux都是跟文件打交道&#xff0c;却不知道文件系统下的目录存放的内容&#xff0c;有点说不过去&#xff0c;特意准备了这篇文章供大家阅读&#xff0c;哪怕有一点点帮助&#xff0c;都是对我的鼓励。 根文件系统一般应该比较小&#xff0c;因为包括严格的文件和一个小的…

手机子品牌的“性能战事”:一场殊途同归的大混战

在智能手机行业进入存量市场后&#xff0c;竞争更加白热化。当各国产手机品牌集体冲高端&#xff0c;旗下子品牌们也正厮杀正酣&#xff0c;显现出刀光剑影。处理器、屏幕、内存、价格等各方面无不互相对标&#xff0c;激烈程度并不亚于高端之争。源于OPPO的中端手机品牌realme…

input专题--独占事件

最近在群里聊天&#xff0c;遇到一个哥们描述的一个问题&#xff1a; 大家好&#xff0c;请教一个关于文件的问题。有几个进程打开了/dev/input 设备&#xff0c;都可以收到数据&#xff0c;又来了一个进程x&#xff0c;打开了这个设备&#xff0c;不知道采用了什么方式&#…

C++框架学习一:朴实无华的高性能RPC框架推荐

一个高性能的RPC框架&#xff1a; 介绍&#xff1a; 框架特性 操作系统&#xff1a;Linux编程语言&#xff1a;C14完全独立&#xff1a;不依赖任何第三方库高性能&#xff1a;微秒级响应高并发&#xff1a;单机百万连接IO多路复用&#xff1a;epoll连接池线程池用法简单 服…

快速入门nginx

目录 1.nginx前言 2.什么是nginx 3.Nginx作用&#xff1f; 1.正向代理 2.反向代理 3.轮询 4.加权轮询 4.Nginx的安装 1.windows下安装 2.linux下安装 5.Nginx常用命令 1.nginx前言 我们公司项目刚刚上线的时候&#xff0c;并发量小&#xff0c;用户使用的少&#…

使用和制作动、静态库

文章目录什么是库&#xff1f;静态库打包方式使用方式生成并执行可执行程序粗暴方式优化方式动态库不一样的.o文件打包方式使用方式生成可执行程序运行可执行程序无法运行时的解决方案动静态库与动静态链接什么是库&#xff1f; 从一开始的helloworld&#xff0c;到现在熟练使…

SpringBoot项目中日志控制,配置logback(logback.xml的配置及介绍)

SpringBoot项目中日志控制&#xff0c;配置logback&#xff08;logback.xml的配置及介绍&#xff09;前言一、大致介绍logback依赖jar包logback的默认配置创建logback.xml配置文件仰天大笑出门去&#xff0c;我辈岂是蓬蒿人前言 SpringBoot项目中对日志的处理手动控制&#xf…