leetcode 160.链表相交

news2024/11/22 9:53:38

⭐️ 往期相关文章

💫链接1:链表分割
💫链接2:链表中倒数第k个结点(快慢指针问题)
💫链接3:leetcode 876.链表的中间结点(快慢指针问题)
💫链接4:leetcode 206.反转链表
💫链接5:leetcode 203.移除链表元素
💫链接6:合并两个有序链表


⭐️ 题目描述

在这里插入图片描述
在这里插入图片描述
🌟 leetcode链接:链表相交

1️⃣ c代码:
思路:如果两个链表相交,则最后一个结点的地址是一样的。否则就是不相交。
但是要找到相交的结点,如果进入相交结点,则两个链表到终点的距离是一样的。但是没有进入相交的时候,可能是 A 链表长度长一些也可能是 B 链表长度长一些。所以要记录 A 链表和 B 链表到终点的长度。让长度小的链表先走差距步,这样两个链表距离相交的结点就是一样的距离了,然后遍历判断当前结点是否相等即可。相等结点就是相交点。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */

 /*
    思路:如果两个链表相交,则最后一个结点的地址是一样的。否则就是不相交
    但是要找到相交的结点,如果进入相交结点,则两个链表到终点的距离是一样的。但是没有进入相交的时候,
    可能是A链表长度长一些也可能是B链表长度长一些。所以要记录A链表和B链表到终点的长度。让长度小的链表
    先走差距步,这样两个链表距离相交的结点就是一样的距离了,然后遍历遍历判断当前结点是否相等即可。
 */
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {

    struct ListNode* tempHeadA = headA;
    struct ListNode* tempHeadB = headB;
    
    // 找A链表的尾结点
    int lengthA = 1;    // 由于是找尾结点所以lengthA的长度会少1 所以默认从1开始记录
    while (tempHeadA->next != NULL) {
        tempHeadA = tempHeadA->next;
        lengthA++;
    }

    // 找B链表的尾结点
    int lengthB = 1;
    while (tempHeadB->next != NULL) {
        tempHeadB = tempHeadB->next;
        lengthB++;
    }

    // 判断尾结点是否相同 不同则不相交
    if (tempHeadB != tempHeadA) {
        return NULL;
    }

    // 来到这里 A链表和B链表一定是相交的
    int gap = abs(lengthA - lengthB);

    // 假设 A长B短 lengthA > lengthB
    struct ListNode * longHead = headA;
    struct ListNode * shortHead = headB;
    // 否则 A短B长
    if (lengthB > lengthA) {
        longHead = headB;
        shortHead = headA;
    }

    // 先让 长的链表走差距步
    while (gap--) {
        longHead = longHead->next;
    }

    // 来到这里 A链表和B链表进入相交的距离一样
    // 若不相等就继续迭代往后走
    while (longHead != shortHead) {
        longHead = longHead->next;
        shortHead = shortHead->next;
    }

    // 来到这里说明 循环为假结束,A链表和B链表当前结点相等
    return shortHead;

}

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

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

相关文章

Servlet 的常用 API + 综合运用【表白墙】

前言 小亭子正在努力的学习编程,接下来将开启JavaEE的学习~~ 分享的文章都是学习的笔记和感悟,如有不妥之处希望大佬们批评指正~~ 同时如果本文对你有帮助的话,烦请点赞关注支持一波, 感激不尽~~ 目录 前言 一、HttpServlet Servlet 的生…

医学图像分割的全卷积transformer

文章目录 The Fully Convolutional Transformer for Medical Image Segmentation摘要本文方法实验结果 The Fully Convolutional Transformer for Medical Image Segmentation 摘要 我们提出了一种新的Transformer ,能够分割不同模式的医学图像。医学图像分析的细…

【机器学习核心总结】什么是EM(最大期望值算法)

什么是EM(最大期望值算法) 在现实生活中,苹果百分百是苹果,梨百分白是梨。 生活中还有很多事物是概率分布,比如有多少人结了婚,又有多少人有工作, 如果我们想要调查人群中吸大麻者的比例呢?敏感问题很难得…

FOF常用的七种投资策略全解析

从当前市场上的投资策略种类来看,大致有七种,包括核心*卫星投资策略、「杠铃」投资策略、反向投资策略、成本平均策略和时间分散化策略、买入并持有策略、美林投资时钟策略、Alpha/Beta投资策略。 投资策略一:美林投资时钟策略 美林投资时钟投资策略相信…

CAN(2)-GD32

CAN(2)-GD32 GD32中CAN的特征 结构框图 CNA总线的工作模式 睡眠工作模式 初始化工作模式 正常工作模式 CAN通信模式 静默通信模式 回环通信模式 回环静默通信模式

hadoop --- MapReduce

MapReduce定义: MapReduce可以分解为Map (映射) Reduce (规约) , 具体过程: Map : 输入数据集被切分成多个小块,并分配给不同的计算节点进行处理Shuffle and Sort:洗牌和排序,在 Map 阶段结束后&#xf…

CCF-CSP真题《202303-4 星际网络II》思路+python,c++满分题解

想查看其他题的真题及题解的同学可以前往查看:CCF-CSP真题附题解大全 试题编号:202303-4试题名称:星际网络II时间限制:2.0s内存限制:1.0GB问题描述: 问题描述 随着星际网络的进一步建设和规模的增大&#x…

docker-compose部署BCH节点

BCH gitlab BCH github 1、下载BCH二进制文件 rootiZj6c076dm0c5n5b39lzlxZ:/data/docker-compose/bch# wget https://github.com/bitcoin-cash-node/bitcoin-cash-node/releases/download/v26.1.0/bitcoin-cash-node-26.1.0-x86_64-linux-gnu.tar.gz --2023-07-05 16:30:46--…

攻防世界-web-CAT

题目描述:抓住那只猫。界面如下: 1. 思路分析 界面很简单,只有一个输入框,提示我们输入域名,我们随便输入一个baidu.com 发现这个域名赋值给url参数传递到后台。因此,这里能做文章的地方只有这个url参数&a…

GPT模型支持下的Python-GEE遥感云大数据分析、管理与可视化技术

第一章 理论基础 1、Earth Engine平台及应用、主要数据资源介绍 2、Earth Engine遥感云重要概念、数据类型与对象等 3、JavaScript与Python遥感云编程比较与选择 4、Python基础(语法、数据类型与程序控制结构、函数及类与对象等) 5、常用Python软件…

算法与数据结构-栈

文章目录 什么是栈如何实现一个“栈”?定长顺序栈动长链式栈 栈的应用栈在函数调用中的应用栈在表达式求值中的应用栈在括号匹配中的应用 总结 什么是栈 后进者先出,先进者后出,这就是典型的“栈”结构。 就像一摞叠在一起的盘子。我们平时放…

JavaScript中的substring方法和fill方法,使用详细(fill方法获取一天24小时)

简介:JavaScript中的数组方法,可以帮助我们操作数组中的元素,以及对数组进行排序和过滤等操作;最近有用到substring和fill方法,这里来记录一下。 一. substring 方法: substring 方法用于从一个字符串中提…

2. PS基本操作

因为网页美工大部分效果图都是利用PS ( Photoshop )来做的,所以以后我们大部分切图工作都是在PS里面完成 ●文件—>打开:可以打开我们要测量的图片 ●CtrlR : 可以打开标尺,或者视图—>标尺 ●右击标尺,把里面的单位改为像素 ●Ctrl加号…

linux上docker容器运行web应用简单介绍(二)

相关文章: linux docker安装及报错处理_做测试的喵酱的博客-CSDN博客 一、mac 安装及使用docker_docker mac_做测试的喵酱的博客-CSDN博客 Docker 容器使用 | 菜鸟教程 linux应用docker基本使用(一)_做测试的喵酱的博客-CSDN博客 一、 …

【设计模式】第十七章:状态模式详解及应用案例

系列文章 【设计模式】七大设计原则 【设计模式】第一章:单例模式 【设计模式】第二章:工厂模式 【设计模式】第三章:建造者模式 【设计模式】第四章:原型模式 【设计模式】第五章:适配器模式 【设计模式】第六章&…

ChatGPT+MidJourney 3分钟生成你的动画故事

chatgpt是真的火了,chatgpt产生了一个划时代的意义——自chatgpt起,AI是真的要落地了。 chatgpt能做的事情太多了,多到最初开发模型的程序员自己,也没法说得清楚chatgpt都能做啥,似乎只要你能想得到,它都有…

Linux内核代码中常用的数据结构

Linux内核代码中广泛使用了数据结构和算法,其中最常用的两个是链表和红黑树。 链表 Linux内核代码大量使用了链表这种数据结构。链表是在解决数组不能动态扩展这个缺陷而产生的一种数据结构。链表所包含的元素可以动态创建并插入和删除。 链表的每个元素都是离散…

系统移植 kernel 移植 配置网卡IP NFS网络文件系统移植 7.4

给fs4412移植内核 Kernel(内核)是操作系统的核心组件,它负责管理计算机硬件和软件资源,提供对底层硬件的访问和控制,以及为应用程序提供运行环境。内核是操作系统的最底层,负责处理系统的各种任务和功能&a…

第二步:STM32F407ZGT6资源介绍

1.1 STM32F407ZGT6资源描述 内核: 32位 高性能ARM Cortex-M4处理器 时钟:高达168M,实际还可以超屏一点点 支持FPU(浮点运算)和DSP指令 IO口: STM32F407ZGT6: 144引脚 114个IO 大部分IO口都耐5V(模拟通道除外) …

Spring Security OAuth2.0(3):Spring Security简单入门

文章目录 前言一、Spring Security 介绍二、创建工程三、认证1. 认证页面2. 安全配置 四、授权 前言 Spring Security 快速入门。 本章代码已分享至Gitee:https://gitee.com/lengcz/security-spring-security 一、Spring Security 介绍 \qquad Spring Secutiry 是…