带环链表及例题

news2025/1/12 12:18:26

环形链表,链表中的尾节点指向链表中的某个节点导致形成循环的链表。

通过图可以这样表示。

我们一般采用快慢指针的方式解决带环链表的题目,下面直接上例题

环形链表

力扣链接:

. - 力扣(LeetCode)

让我们判断一个链表是否为环形链表。

思路:

如果不是循环链表,最终会指向NULL

而如果是循环链表

1.快指针会比慢指针先进入环形链表。

2.快指针速度会比慢指针快一个单位,因此两个指针每次移动都会拉近一个距离。

3.当两个指针相等时,说明是环形链表。

参考代码:

思考:

若快指针速度为2,3,甚至n时,能否解决该问题。

其实这是一个数学问题

假设快指针速度为n。
快指针进入循环后需要追击慢指针的长度为m
循环长度为C
慢指针遇到快指针时的运动长度为L
以上参数均为整数
那么我们可以写出以下式子:
nL=L+x*C+C-m    (x为快指针进入循坏时的运动圈数,大于0)
(n-1)L=(x+1)*C-m
L=[(x+1)*C-m]/(n-1)

其中(C为固定的,x可以取任何大于0的值,L,m均为整数),实现该条件即可

n为2即快指针速度为2时可以满足所有的情况

以n=3为例子

需要(x+1)*C-m为偶数

当C为奇数时,由于x+1可以为任意值,所以(x+1)*C既可以为奇数也可以为偶数,无论m为何值均可均成立

当C为偶数时,(x+1)*C只能为偶数,那么m则必须为偶数才能成立。

随机链表的复制

力扣链接:

. - 力扣(LeetCode)

思路:

我们可以在原先每个节点之后都创建上一个新节点并与原链表串起来

那么如果random指向NULL则原节点的后一个位置即为我们创建的对应的节点,这个节点的random也指向NULL

如果原节点不指向NULL,则指向原节点的random节点的下一个位置(即我们创建的与该节点对应的节点)

串完之后将我们创建好的链表从中取出即可

参考代码:

环形链表2

力扣链接

. - 力扣(LeetCode)

思路:
 

这道题也是一个数学问题

我们假设:
头节点到循环的起始位置之间的距离为a
相遇位置到起始位置的距离为b
起始位置到相遇位置的距离为c
慢指针速度为1
快指针速度为2
那么慢指针到相遇位置移动长度为slow=a+ib+c
快指针到相遇位置移动长度为fast=a+jb+c
那么fast=2*slow
即a+jb+c=2*(a+ib+c)
即c=(j-2i)b-a
我们可知相遇位置只要再移动a个单位即可到达循坏位置开始的(j-3i)b位置,即起始位置
那么我们就让头节点和慢指针一起移动,头节点和慢指针移动a个单位后均会到达起始位置,也就是相遇

参考代码:

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

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

相关文章

38 线程互斥

目录 1.问题 2.互斥相关概念 3.互斥量 4.互斥量接口 5.修改买票代码 6.互斥量原理 7.锁的封装 8.可重入和线程安全 1. 问题 用一个模拟抢票过程的程序引出本节话题,如果有1000张票,设为全局变量,生成3个线程每隔一秒抢一张票,如…

奥比中光Astra RGBD ROS1配置(乐视RGBD)

早年买了一款乐视RGBD一直落灰,最近做一个机器人项目想重新使用起来。发现官方给的RGBD包和github上面的ros_astra_camera包并不能很好的驱动这款相机。研究了一下进行补足。 最终的结果是彩色,红外以及深度退昂均能实时读取。具体过程如下: …

【LeetCode】---剑指Offer 31.栈的弹出压入序列

一、题目描述: 二、算法原理: 核心思想: 入栈的栈顶元素跟出栈序列进行匹配,入一个匹配一个。注意:结束的标志就是入栈序列走完了。 三、代码实现: class Solution { public:/*** 代码中的类名、方法名、…

每天五分钟深度学习:如何理解梯度下降算法可以逼近全局最小值?

本文重点 上节课程中,我们已经知道了逻辑回归的代价函数J。要想最小化代价函数,我们需要使用梯度下降算法。 梯度下降算法地直观理解: 为了可视化,我们假设w和b都是单一实数,实际上,w可以是更高地维度。 代价函数J是在水平轴w和b上的曲面,因此曲面的高度就是J(w,b)在…

低功耗数字IC后端设计实现典型案例| UPF Flow如何避免工具乱用Always On Buffer?

下图所示为咱们社区低功耗四核A7 Top Hierarchical Flow后端训练营中的一个案例,设计中存在若干个Power Domain,其中Power Domain2(简称PD2)为default Top Domain,Power Domain1(简称PD1)为一个需要power off的domain&…

21 如何进行高保真压测和服务扩容?

在后台架构中,压测非常常见,也是必须的工作。它能够帮我们发现微服务架构中的性能瓶颈,以及知道构建的微服务能承载的流量极限值。 但实际情况是,很多压测并不能发现瓶颈点和微服务所能承载的真实流量极限值。一方面是因为压测时…

【专篇】DDR4 SDRAM-01总体介绍

概念 DDR4 SDRAM(Double-Data-Rate Fourth Generation Synchronous Dynamic Random Access Memory)是一种先进的高性能存储器规格,是DDR3 SDRAM的后续产品。自2011年首次由三星电子制造并公布以来,它已经成为现代计算机系统中广泛采用的内存标准。 主要特点: 更高带宽: DD…

Spring6 当中的 Bean 循环依赖的详细处理方案+源码解析

1. Spring6 当中的 Bean 循环依赖的详细处理方案源码解析 文章目录 1. Spring6 当中的 Bean 循环依赖的详细处理方案源码解析每博一文案1.1 Bean的循环依赖1.2 singletion 下的 set 注入下的 Bean 的循环依赖1.3 prototype下的 set 注入下的 Bean 的循环依赖1.4 singleton下的构…

什么是人才测评系统?

人才测评系统是一个整体的框架,里面有很多个部分构成,既有常见的人才测评方法,也包含有招聘的目的。随着科学研究的不断深入,人才测评系统已经变得更加完善,将现代心理学和管理学知识吸纳到人才测评理论中来&#xff0…

OpenAI神秘搞事,GPT-4.5默默上线?推理碾压GPT-4网友震惊,奥特曼笑而不语

【新智元导读】就在昨夜,整个AI社区都被一个神秘大模型震撼到了:它名为gpt2-chatbot,性能直接超越很多开源模型和GPT-4!网友们展开猜测,有说它是GPT-4.5的,有说是GPT-5的,还有人猜它是GPT-4Q*&a…

深度学习论文: MobileNetV4 - Universal Models for the Mobile Ecosystem及其PyTorch实现

深度学习论文: MobileNetV4 - Universal Models for the Mobile Ecosystem及其PyTorch实现 MobileNetV4 - Universal Models for the Mobile Ecosystem PDF: https://arxiv.org/pdf/2404.10518.pdf PyTorch代码: https://github.com/shanglianlm0525/CvPytorch PyTorch代码: ht…

ARP学习及断网攻击

1.什么是ARP ARP(Address Resolution Protocol)是一种用于在IPv4网络中将IP地址映射到MAC地址的协议。在计算机网络中,每个网络接口都有一个唯一的MAC地址(Media Access Control address),用于识别网络设备…

JAVA同城服务美容美发到店服务上门服务系统源码微信小程序+微信公众号+H5+APP

随着科技的飞速发展,互联网和移动互联网已经渗透到我们生活的方方面面,同城服务美容美发到店服务上门服务系统应运而生,为整个行业带来了巨大的变革和无限的可能。该系统的重要性和优势不言而喻,对于行业发展和用户需求的影响深远…

LLaMA3(Meta)微调SFT实战Meta-Llama-3-8B-Instruct

LlaMA3-SFT LlaMA3-SFT, Meta-Llama-3-8B/Meta-Llama-3-8B-Instruct微调(transformers)/LORA(peft)/推理 项目地址 https://github.com/yongzhuo/LLaMA3-SFT默认数据类型为bfloat6 备注 1. 非常重要: weights要用bfloat16/fp32/tf32(第二版大模型基本共识), 不要用fp16, f…

Win环境下Python语言通过ODBC/JDBC连接SinoDB数据库

1. 前言 本文介绍在Windows环境下Python语言通过ODBC和JDBC的方式连接SinoDB数据库,并对数据库进行基本操作。 2. 软件安装包 SinoDB数据库:SinoDB 12.10.FC8   SinoDB CSDK(Windows):SinoDB Client-SDK 4.10.FC8   Python语言开发包&am…

Spring-aop切面环绕通知

1.pom引入 <!-- 切面依赖--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId> </dependency> 2.定义注解&#xff1a;AroundAnnotation import java.lang.annotation…

公文写作笔记

标题 最后一行的日期&#xff0c;后边占4个格子。两个数字占一格。落款单位在日期的正上方。 格式积累 内容&#xff1a; ①开头&#xff1a;缘由 ②主题&#xff1a;对策&#xff08;别人做得好&#xff0c;就借鉴&#xff09; ③结尾&#xff1a;简单的总结&#xff08;字…

Linux基础——Linux开发工具(上)_vim

前言&#xff1a;在了解完Linux基本指令和Linux权限后&#xff0c;我们有了足够了能力来学习后面的内容&#xff0c;但是在真正进入Linux之前&#xff0c;我们还得要学会使用Linux中的几个开发工具。而我们主要介绍的是以下几个&#xff1a; yum, vim, gcc / g, gdb, make / ma…

OpenHarmony 实战开发——自测试执行框架

OpenHarmony为开发者提供了一套全面的开发自测试框架OHA-developer_test&#xff0c;开发者可根据测试需求开发相关测试用例&#xff0c;开发阶段提前发现缺陷&#xff0c;大幅提高代码质量。 本文从基础环境构建&#xff0c;用例开发&#xff0c;编译以及执行等方面介绍OpenH…

FlaUI

FlaUI是一个基于微软UIAutomation技术&#xff08;简称UIA&#xff09;的.NET库&#xff0c;它主要用于对Windows应用程序&#xff08;如Win32、WinForms、WPF、Store Apps等&#xff09;进行自动化UI测试。FlaUI的前身是TestStack.White&#xff0c;由Roemer开发&#xff0c;旨…