「题解」相交链表

news2024/11/18 12:48:15

🍉题目

题目链接
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

🍉解析

“提示”部分有提示链表数不为零,所以讨论链表为空的情况。
最简单粗暴的思路就是:遍历链表,先使用循环遍历A链表,然后嵌套循环遍历B,比对A、B是否存在地址相同的节点,若有,则第一个这样的节点就是相交的起点。
这里的思路就是比对地址,我们不能比较节点值是否相等,毕竟不同节点的值可以相等
但是这样的时间复杂度O(N^2),显然不是最优解法。下面来看比较好的解法。
知道大思路是比较地址相不相等之后,还有一个问题:两个链表的长度不一样。这个问题倒是不难解决,我们直接让长的链表先走,它比短的链表多几个节点,就先走几个节点,既然如此,那先来获取链表长度吧。

int len1 = 0,len2 = 0;
    ListNode* cur1 = headA,*cur2 = headB;
    
    //得到两链表长度
    while(cur1) {
        cur1 = cur1->next;
        len1++;
    }
    while(cur2) {
        cur2 = cur2->next;
        len2++;
    }
    int gap = abs(len1 - len2); //求出相差几个节点

这里用绝对值函数abs,就不用分类讨论len1、len2谁比较长了
然后又有一个问题,我不知道谁比较长啊,又要写条件语句分类讨论了……
其实大可不必,这里使用假设法就非常省事儿了,怎么个假设法?一开始假设A是长链表,B是短链表,写个 if :如果 len1 真比 len2 长,就往下走;如果 len1 比 len2 短,那就A和B交换。

ListNode* longlist = headA; //先假设a是较长的链表
    ListNode* shortlist = headB;
    if(len1 < len2) {
        longlist = headB;
        shortlist = headA;
    }
    while(gap--) {
        longlist = longlist->next;
    }

那现在A和B要走的节点数就一样了,接下来边走边比较咯。
整道题代码如下:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
typedef struct ListNode ListNode;
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {
    int len1 = 0,len2 = 0;
    ListNode* cur1 = headA,*cur2 = headB;
    
    //得到两链表长度
    while(cur1) {
        cur1 = cur1->next;
        len1++;
    }
    while(cur2) {
        cur2 = cur2->next;
        len2++;
    }
    int gap = abs(len1 - len2); //求出相差几个节点
    ListNode* longlist = headA; //先假设a是较长的链表
    ListNode* shortlist = headB;
    if(len1 < len2) {
        longlist = headB;
        shortlist = headA;
    }
    while(gap--) {
        longlist = longlist->next;
    }
    while(longlist) {
        if(longlist == shortlist) {
            return longlist;
        }
        longlist = longlist->next;
        shortlist = shortlist->next;
    }
    return NULL;
}

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

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

相关文章

Windows10配置深度学习环境

一、Anaconda安装与虚拟环境创建 Anaconda的出现极大的方便了研究人员的Python开发工作&#xff0c;anaconda可以创建多个虚拟环境&#xff0c;这些虚拟环境就像一间间教室一样&#xff0c;虚拟环境彼此之间、虚拟环境与基础环境&#xff08;base&#xff09;之间互不影响&…

C++之Max

背景 想学习数据结构&#xff0c;这是看的课程的习题&#xff0c;讲课老师用的是类C语言&#xff0c;具体的实现还是得自己来。 准备工作 用开发工具Microsoft Visual Studio(VS)建立一个空白的C控制台项目 选择项目的存储路径 成功建立 我在 Microsoft Visual Studio中用…

VSCode配置msvc编译调试环境

1.VS Code简介 VS Code 使用 Electron 框架构建用户界面,该框架使用 Chromium 和 Node.js 构建桌面应用程序。这使得 VS Code 能够在 Windows、Linux 和 macOS 上运行,并且可以使用 Web 技术 (HTML、CSS 和 JavaScript) 构建用户界面。 VS Code 使用 Monaco 引擎来提供文本编辑…

OpenCV入门——图像视频的加载与展示一些API

文章目录 OpenCV创建显示窗口OpenCV加载显示图片OpenCV保存文件利用OpenCV从摄像头采集视频从多媒体文件中读取视频帧将视频数据录制成多媒体文件OpenCV控制鼠标关于[np.uint8](https://stackoverflow.com/questions/68387192/what-is-np-uint8) OpenCV中的TrackBar控件TrackBa…

antd中的form表单数据不更新

antd中的form表单 initialValue导致数据不更新问题 理解 &#xff1a; initialValue就是所谓的defaultValue,只会在第一次赋值的时候改变&#xff0c;却又有一些不同&#xff0c;因为 initialValue又会因其他改动而改变。 解决&#xff1a; form.resetFields();

内网Jenkins 部署.net(dotnet)项目

一、前置条件 内网部署Jenkins&#xff0c;并安装好所需插件 此篇内容需承接内网搭建Jenkins自动化远程部署项目到Windows服务器_jenkins内网安装-CSDN博客 &#xff0c;才更好操作与理解 二、在Jenkins中创建项目 三、配置项目 General Source Code Management Build Envi…

2023最新版本 从零基础入门C++与QT(学习笔记) -4- C/C++混合编程

&#x1f38f;在C兼容C只需要调用C头文件 &#x1f384;格式 &#x1f388; -1- extern(关键字) “C”{ }(花括号) &#x1f388; -2- 花括号里面填写要包含的头文件 &#x1f384;代码段格式 extern "C" {#include “stdio.h”#include “string.h” }&#x…

2023深圳高交会,11月15-19日在深圳会展中心盛大开幕,展出五天时间

跨越山海&#xff0c;共赴鹏城。 11月15日至19日&#xff0c;第二十五届中国国际高新技术成果交易会在深圳会展中心&#xff08;福田展区&#xff09;和深圳国际会展中心&#xff08;宝安展区&#xff09;两馆同时举行。一场不可错过的全球性高科技盛会如期而至。 科技赋能发…

2023年数据泄露事件频发,企业应该如何做好数据安全保护?

在当今数字化时代&#xff0c;每时每刻都会产生大量的数据&#xff0c;这些数据包含大量的敏感信息&#xff0c;网络犯罪者可以利用这些数据获取巨大的利益&#xff0c;由此他们会通过技术攻击、网络钓鱼等各种非法手段来获取&#xff0c;而这也导致数据泄露事件频频发生。 以下…

冰点还原精灵Deep Freeze for mac版

Deep Freeze是一种系统恢复软件&#xff0c;它可以保护计算机系统免受恶意软件和不必要的更改。它的基本功能是在计算机重启后恢复到原始状态&#xff0c;即使用户进行了任何更改也不例外。 Deep Freeze主要用于公共场所的计算机&#xff0c;如图书馆、学校实验室和互联网咖啡馆…

JavaScript基础入门05

目录 1.操作结点 1.1新增节点 1.1.1. 创建元素节点 1.1.2. 插入节点到 dom 树中 1.2删除节点 2.代码案例: 猜数字 2.1预期效果 2.2代码实现 3.代码案例: 表白墙 3.1预期效果 3.2创建页面布局 3.3调整样式 3.4实现提交 3.5实现点击按钮的动画效果 4.代码案例: 待办…

小波神经网络的时间序列预测——短时交通流量预测

大家好&#xff0c;我是带我去滑雪&#xff01; 小波神经网络&#xff08;Wavelet Neural Network&#xff0c;WNN&#xff09;结合了小波变换和神经网络的特性&#xff0c;是一种在信号处理和模式识别领域应用广泛的神经网络模型。它的设计灵感来自于小波变换的多尺度分析特性…

Hive 查询优化

Hive 查询优化 -- 本地 set mapreduce.framework.namelocal; set hive.exec.mode.local.autotrue; set mapperd.job.trackerlocal; -- yarn set mapreduce.framework.nameyarn; set hive.exec.mode.local.autofalse; set mapperd.job.trackeryarn-- 向量模式 set hive.vectori…

算法萌新闯力扣:搜索插入位置

力扣热题&#xff1a;搜索插入位置 开篇 对于想要学会二分查找的算法萌新来说&#xff0c;这道题是非常友好的学习题目&#xff0c;完完全全按照二分查找模版就可以完成。大伙儿还不赶紧练起来&#xff01; 题目链接:35.搜索插入位置 题目描述 代码思路 这道题时完完全全的…

使用VC++设计程序:对于一幅256级灰度图像,求其一元熵值、二维熵值

数字图像处理–实验二B图像的一维熵与二维熵算法 本文主要是对图像进行一维熵以及二维熵的计算&#xff0c;下面附有实现的代码 文章目录 数字图像处理--实验二B图像的一维熵与二维熵算法一、 实验内容二、 一维熵1. 一维熵的定义2. 一维熵的C代码实现 三、 二维熵1. 二维熵的定…

JSP注释方式演示 讲解显式与隐式注释

好 今天我们来了解一下jsp中的注释哦 它支持两种注释: 显式注释/隐式注释 显式注释 是 允许被客户端看到的 就是 打开浏览器 用查看源码方式能看到的注释 与之对应 隐式注释 就是 在客户端 是无法看到这些注释信息的 显式注释 的语法就是html的注释语法 <!-- 显式注释 --…

03-学成在线内容管理模块之课程查询

课程查询 需求分析 教学机构人员点击课程管理按钮进入课程查询界面,在课程列表页面输入查询条件查询课程的信息 当不输入查询条件时默认会全部课程信息,输入查询条件会查询符合条件的课程信息,约束条件是本教学机构查询本机构的课程信息 数据模型(model工程) 课程查询功能…

ACM练习——第三天

今天继续练习C和ACM模式 在写题之前先了解一些新的知识 1.#include <algorithm> #include <algorithm> 是 C 标准库中的头文件之一&#xff0c;其中包含了一系列用于处理各种容器&#xff08;如数组、向量、列表等&#xff09;和其他数据结构的算法。这个头文件提供…

spring cloud alibaba之nacos

spring cloud nacos 安装和启动nacos # 解压nacos安装包 # tar -zvxf nacos-server-1.4.1.tar.gz# nacos默认是以集群的模式启动&#xff0c;此处先用单机模式 # cd /usr/local/mysoft/nacos/bin # sh startup.sh -m standalone# nacos 日志 # tail -f /usr/local/mysoft/na…

C++ [多态]

本文已收录至《C语言和高级数据结构》专栏&#xff01; 作者&#xff1a;ARMCSKGT 多态 前言正文多态的概念多态的定义构成多态的条件关于final和override关于重载,重写和重定义 抽象类概念补充 多态的原理虚表指针和虚表关于虚函数的调用动态绑定和静态绑定 单继承与多继承中的…