数据结构之“刷链表题”

                                                🌹个人主页🌹:喜欢草莓熊的bear

                                                       🌹专栏🌹:数据结构

目录

前言

一、相交链表

题目链接

大致思路

代码实现

二、环形链表1

题目链接

大致思路

代码实现

三、环形链表2

题目链接

大致思路

代码实现

总结



前言

通过一些例题来复习一下之前学习的链表。

一、相交链表

题目链接

相交链表

大致思路

用两个指针来遍历两个链表,存在相同则就有相交(注意这里相同的地址或者是指针相同,不可以判断指针里面的值是否相同)。我们要让两个表在相同位置进行遍历、找相同操作。很简单我们用计数操作来计入链表长度,让长的走了距离差,再让他们同时走。这里计算距离差我们要调用一下绝对值函数(abs)。代码里面还运用了假设法,假设谁为长链表,假设不成立就调换一下就可以了,这里假设法值得体会一下。

代码实现

struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) 
{struct ListNode* curA = headA;struct ListNode* curB = headB;int A=0;int B=0;while(curA->next){curA=curA->next;A++;}while(curB->next){curB=curB->next;B++;}if(curA!=curB){return NULL;}int juli = abs(A-B);struct ListNode* llong = headA;struct ListNode* sshort = headB;if(A<B){llong = headB;sshort = headA;}while(juli--){llong=llong->next;}while(llong!=sshort){llong=llong->next;sshort=sshort->next;}return llong;
}

二、环形链表1

题目链接

环形链表1

大致思路

本地要求我们判断是否是一个带环链表,带环会存在循环,用快慢指针来解决这题。fast指针走两步,slow走一步。他们会相遇吗?我画图证明一下:我这里证明的是fast走两步,slow走一步的情况,其他情况大家可以尝试证明。

结论带环了一定会相遇,代码实现很简单。

代码实现

bool hasCycle(struct ListNode *head) 
{struct ListNode *fast=head;struct ListNode *slow=head;while(fast && fast->next){fast=fast->next->next;slow=slow->next;if(slow == fast){return true;}}return false;
}

三、环形链表2

题目链接

环形链表2

 基于带环链表衍生出来的,先判断是否带环,带环了还要返回入环的第一个节点。

大致思路

与上一题环形链表相似,还要返回第一个入环节点。这里先给上一个结论,让相遇指针的下一个节点和头指针同时走他们就会在第一入环的节点相遇。我们看作一个相交链表返回相交节点的问题来做,直接调用前面写的函数就可以了。    让我来证明一下

 运用了一下数学公式等到关系式证明了。

代码实现

struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) 
{struct ListNode* curA = headA;struct ListNode* curB = headB;int A=0;int B=0;while(curA->next){curA=curA->next;A++;}while(curB->next){curB=curB->next;B++;}if(curA!=curB){return NULL;}int juli = abs(A-B);struct ListNode* llong = headA;struct ListNode* sshort = headB;if(A<B){llong = headB;sshort = headA;}while(juli--){llong=llong->next;}while(llong!=sshort){llong=llong->next;sshort=sshort->next;}return llong;
}
struct ListNode *detectCycle(struct ListNode *head) 
{struct ListNode *fast=head;struct ListNode *slow=head;while(fast && fast->next){fast=fast->next->next;slow=slow->next;if(slow == fast){struct ListNode* newnode = slow->next;slow->next=NULL;return getIntersectionNode(head,newnode);}}return NULL;
}

总结

这些都题还不错,值得我们掌握。加油加油,请持续关注bear!!🌹🌹

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

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

相关文章

爬虫逆向实战(41)-某巢登陆(AES、MD5、RSA、滑块验证码)

一、数据接口分析 主页地址&#xff1a;某巢 1、抓包 通过抓包可以发现在登录时&#xff0c;网站首先请求captcha/querySlideImage/来获取滑块验证码的图片&#xff0c;然后请求captcha/checkCode/接口来验证滑块验证码。滑块验证码校验成功后&#xff0c;请求noshiro/getPu…

论坛万能粘贴手(可将任意文件转为文本)

该软件可将任意文件转为文本。 还原为原文件的方法&#xff1a;将得到的文本粘贴到记事本&#xff0c;另存为UUE格式&#xff0c;再用压缩软件如winrar解压即可得到原文件。建议用于小软件。 下载地址&#xff1a;https://download.csdn.net/download/wgxds/89505015 使用演示…

【PYG】切片语法[:,]

在 Python 中&#xff0c;使用切片语法 [:,] 是一种方便的方式来选择多维数组或张量的特定部分。具体来说&#xff0c;这种语法在处理 NumPy 数组或 PyTorch 张量时非常有用。让我们详细解释一下为什么可以写成 [:, :] 以及这种语法的含义。 切片语法解释 :&#xff1a;表示选…

pytorch自适应的调整特征图大小

文章目录 代码 代码 256256 --> 224224 import torch import torch.nn as nn# 假设 x 是你的特征图&#xff0c;形状为 (4, 32, 256, 256) x torch.randn(4, 32, 256, 256)# 方法一&#xff1a;使用自适应平均池化调整大小 adaptive_avg_pool nn.AdaptiveAvgPool2d((224…

Kafka 位移

Consumer位移管理机制 将Consumer的位移数据作为一条条普通的Kafka消息&#xff0c;提交到__consumer_offsets中。可以这么说&#xff0c;__consumer_offsets的主要作用是保存Kafka消费者的位移信息。使用Kafka主题来保存位移。 消息格式 位移主题就是普通的Kafka主题。也是…

【JavaScript脚本宇宙】探索前端打包利器:从Webpack到Esbuild的全面解析

即刻更新&#xff0c;无缝开发&#xff1a;六大打包工具的热重载实战指南 前言 在现代前端开发中&#xff0c;高效的模块打包工具对提高开发效率和代码质量起着至关重要的作用。本文将详细介绍六种流行的JavaScript打包工具&#xff1a;Webpack、Parcel、Vite、Snowpack、Rol…

基于KDE下kcrash框架二次开发core dump工具

将kde下框架的源码编译后安装使用 配置环境和依赖 根据kcrash源码的cmakelist文件可知该项目的主要环境和依赖包括&#xff1a; qt6.6以上&#xff1b;EMC6.4&#xff08;KDE下EMC框架&#xff0c;其他地方没找到这个版本的EMC&#xff09;&#xff0c;KCoreAddons&#xff0…

HCIE实验这样玩太高级了吧?实现FRR+BFD+OSPF与BGP的联动

号主&#xff1a;老杨丨11年资深网络工程师&#xff0c;更多网工提升干货&#xff0c;请关注公众号&#xff1a;网络工程师俱乐部 晚上好&#xff0c;我的网工朋友。 今天搞个HCIE实验玩玩&#xff0c;上回分享了个张总讲解的防火墙配置实验思路&#xff0c;后来还特地搞了个视…

GPT-4o文科成绩超一本线,理科为何表现不佳?

目录 01 评测榜单 02 实际效果 什么&#xff1f;许多大模型的文科成绩竟然超过了一本线&#xff0c;还是在竞争激烈的河南省&#xff1f; 没错&#xff0c;最近有一项大模型“高考大摸底”评测引起了广泛关注。 河南高考文科今年的一本线是521分&#xff0c;根据这项评测&…

python与matlab微分切片的区别

python python使用np中的linespace生成等间隔数值&#xff0c; import numpy as np numpy.linspace(start, stop, num50, endpointTrue, retstepFalse, dtypeNone, axis0)start&#xff1a;序列的起始值。stop&#xff1a;序列的结束值。如果 endpoint 为 True&#xff0c;该…

代码随想录算法训练营第55天 [ 42. 接雨水 84.柱状图中最大的矩形]

代码随想录算法训练营第55天 [ 42. 接雨水 84.柱状图中最大的矩形] 一、42. 接雨水 链接: 代码随想录. 思路&#xff1a;找到左边第一个大于我的和右边第一个大于我的 做题状态&#xff1a;看解析后做出来了 //暴力法&#xff08;会超时&#xff09; class Solution { public:i…

CesiumJS【Basic】- #043 绘制脉冲线(Entity方式)- 需要自定义着色器

文章目录 绘制脉冲线(Entity方式)- 需要自定义着色器1 目标2 代码2.1 main.ts3 资源文件绘制脉冲线(Entity方式)- 需要自定义着色器 1 目标 使用Entity方式绘制脉冲线 2 代码 2.1 main.ts import * as Cesium from cesium;const viewer = new Cesium.Viewer(cesiumCont…

【TB作品】打地鼠游戏,ATMEGA16单片机,Proteus仿真 打地鼠游戏

11个按键LCD1602显示器9个灯蜂鸣器打地鼠小游戏就是九个灯泡&#xff0c;对应九个按键&#xff0c;灯泡有红黄蓝&#xff0c;每间隔一会儿就会亮一个灯&#xff0c;代表地鼠冒出来&#xff0c;按一下按键让灯泡灭掉代表打地鼠&#xff0c;红的三分&#xff0c;黄的两分&#xf…

一句话介绍什么是AI智能体?

什么是AI智能体&#xff1f; 一句话说就是利用各种AI的功能的api组合&#xff0c;完成你想要的结果。 例如你希望完成一个关于主题为啤酒主题的小红书文案图片&#xff0c;那么它就可以完成 前面几个步骤类似automa的组件&#xff0c;最后生成一个结果。

面试突击指南:Java基础面试题4

1. HTTP响应码有哪些 HTTP响应码分为以下几类: 1xx(临时响应):表示请求已被接收,继续处理。2xx(成功):表示请求已成功被服务器接收、理解、并接受。3xx(重定向):表示需要进一步的操作以完成请求。4xx(客户端错误):表示请求包含错误或无法被服务器处理。5xx(服务…

RIP 路由 3 个定时器的工作流程和 4 种防环方法

RIP 路由 3 个定时器的工作流程 根据 RFC2453, RIP 协议一共定义了 3 种定时器&#xff0c;分别是&#xff1a; ・更新定时器 (Update Timer) ・老化定时器 (Age Timer) ・垃圾收集定时器 (Garbage-collectTimer) RIP 的更新信息发布是由更新定时器控制的&#xff0c;默认…

IT专业入门——高考假期预习指南,我来做你的引路人

目录 认识IT知识体系 什么是计算机 按规模、速度和功能分类 按照其工作模式分类 硬件 操作系统 编程语言 对学习语言的一点建议 对于学python的一点看法 网络 数据结构与算法 数据库 Web开发 Web前端 Web后端 基础预习指南 技术路线学习一览 学习资源推荐 刷…

spring interceptor失效

适用方式 增加interceptor&#xff0c;implements HandlerInterceptor&#xff0c;实例如下 Slf4j public class AccessInterceptor implements HandlerInterceptor {Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object han…

开放式耳机哪个品牌最好?2024精选5款热门品牌,新手必看的开放式耳机指南!

最近想买开放式耳机&#xff0c;但面对众多品牌和型号&#xff0c;真的太难挑选了&#xff1f;别担心&#xff0c;作为耳机发烧友和测评专家&#xff0c;我为大家带来了几款热门开放式耳机的横向对比。从6个方面告诉大家怎么样去挑选开放式耳机&#xff0c;并且推荐了几款我觉得…

在C++中什么是异常处理以及如何使用try-catch块

在C中&#xff0c;异常处理是一种处理运行时错误&#xff08;如内存分配失败、无效的用户输入等&#xff09;的机制。它允许程序在出现错误时优雅地处理&#xff0c;而不是简单地崩溃。异常处理的核心组件是try、catch和throw。 throw&#xff1a;这是用来抛出异常的语句。当某…