Golang 链表的创建和读取 小记
文章目录
- 链表的相关知识
- 链表的创建:
- 模拟方式建立
- 链表的**递归创建**
- 链表的读取
- 遍历读取
- 递归读取
- 完整代码
链表的相关知识
链表有时会具有头节点,头节点的指针指向第一个节点的地址,其本身的数据域可以根据自己的选择进行赋值
接下来我将以将int转换为链表为例进行演示,如果有什么地方可以改进,也希望路过大神能够指出
链表的创建:
链表的结构定义一般如下,即由本身的数据和指向下一个节点的指针构成
type ListNode struct {Val intNext *ListNode//不能直接赋值listnode,避免产生嵌套引用
}
链表的创建(每个节点存储一位数字),在创建的过程中 我们需要设置中间的可变节点,不然我们可能会丢失对链表的第一个节点的索引,以下的例子中我们就使用middle为中间节点;将head设置为头节点,并代表完整的链表
模拟方式建立
我们利用迭代的方法,只要还存在num,就更新创建一个新的节点
// 尝试建立有头节点的链表,关键在于赋值给middle.next
func CreateList(nums int) *ListNode {Head := new(ListNode) //这代表一整个链表,并通过这里的头节点进行标注,方便该链表的引用middle := Head //middle视作Head链表的中间节点,其一直改变for nums > 0 {middle.Next = &ListNode{Val: nums % 10}//头节点赋值方法fmt.Printf("middle.Val: %v\n", middle.Val)middle = middle.Nextnums /= 10}return Head
}
链表的递归创建
// 递归建立链表
func RecurCreateList(nums int) *ListNode {//在递归时好像不需要单独保存头节点位置,后续的位置会递归存储在next中,不用考虑被覆盖的问题middle := new(ListNode) //建立头指针,其指针不变// 123%10=3// 12.3%10=2// 1.23%10=1// 120%10=0// 12 %10=2// 1.2%10=1if nums > 1 || nums%10 > 0 {middle.Val = nums % 10fmt.Printf("middle.Val: %v\n", middle.Val)if nums > 1 {nums /= 10middle.Next = RecurCreateList(nums)}}return middle
}
链表的读取
遍历读取
链表读取时我们需要根据是否具有头节点进行一定的调整,下面是使用遍历(迭代)进行创建的过程
// 尝试遍历读取链表
func ReadList(L ListNode) {middle := L //将头节点赋予这里的中间节点middle//循环读取链表的内容for middle.Next != nil {v := middle.Next.Val //由于我们这里判断的是本身节点是否为空,所以在输出时使用下一节点的值进行输出,避免错过某个值fmt.Printf("v: %v\n", v)// // fmt.Printf("L: %v\n", L)middle = *middle.Next// // fmt.Printf("L: %v\n", L)}
}
递归读取
下面为使用递归进行读取的方法
由于节点的定义过程中使用内嵌,在建立相关函数时都使用指针比较方便[ 虽然前面都没注意:( ],
// 尝试递归读取链表
func RecurReadList(L *ListNode) {fmt.Printf("L.Val: %v\n", L.Val) //打印出此节点中的Val//如果本结点的指针不为空,即还有下一个节点,继续读取if L.Next != nil {RecurReadList(L.Next) //将下个节点的指针传入}//如果运行到这里,说明指针为空,函数也就到此结束了
}
完整代码
package mainimport ("fmt"
)type ListNode struct {Val intNext *ListNode
}func main() {// l := CreateList(13)l := RecurCreateList(13)fmt.Printf("l: %v\n", *l)// ReadList(*l)RecurReadList(l)// RecurReadList(l.Next)// fmt.Println(l.Next.Val)
}// 尝试建立有头节点的链表,关键在于赋值给middle.next
func CreateList(nums int) *ListNode {Head := new(ListNode) //这代表一整个链表,并通过这里的头节点进行标注,方便该链表的引用middle := Head //middle视作Head链表的中间节点,其一直改变for nums > 0 {middle.Next = &ListNode{Val: nums % 10} //头节点赋值方法fmt.Printf("middle.Val: %v\n", middle.Val)middle = middle.Nextnums /= 10}return Head
}// 递归建立链表
func RecurCreateList(nums int) *ListNode {//在递归时好像不需要单独保存头节点位置,后续的位置会递归存储在next中,不用考虑被覆盖的问题middle := new(ListNode) //建立头指针,其指针不变// 123%10=3// 12.3%10=2// 1.23%10=1// 120%10=0// 12 %10=2// 1.2%10=1if nums > 1 || nums%10 > 0 {middle.Val = nums % 10fmt.Printf("middle.Val: %v\n", middle.Val)if nums > 1 {nums /= 10middle.Next = RecurCreateList(nums)}}return middle
}// 尝试遍历读取链表
func ReadList(L ListNode) {middle := L //将头节点赋予这里的中间节点middle//循环读取链表的内容for middle.Next != nil {v := middle.Next.Val //由于我们这里判断的是本身节点是否为空,所以在输出时使用下一节点的值进行输出,避免错过某个值fmt.Printf("v: %v\n", v)// // fmt.Printf("L: %v\n", L)middle = *middle.Next// // fmt.Printf("L: %v\n", L)}
}// 尝试递归读取链表
func RecurReadList(L *ListNode) {fmt.Printf("L.Val: %v\n", L.Val) //打印出此节点中的Val//如果本结点的指针不为空,即还有下一个节点,继续读取if L.Next != nil {RecurReadList(L.Next) //将下个节点的指针传入}//如果运行到这里,说明指针为空,函数也就到此结束了
}相关文章:
Golang 链表的创建和读取 小记
文章目录 链表的相关知识链表的创建:模拟方式建立链表的**递归创建** 链表的读取遍历读取递归读取 完整代码 链表的相关知识 链表有时会具有头节点,头节点的指针指向第一个节点的地址,其本身的数据域可以根据自己的选择进行赋值 接下来我将以将int转…...
实验记录:深度学习模型收敛速度慢有哪些原因
深度学习模型收敛速度慢有哪些原因? 学习率设置不当: 学习率是算法中一个重要的超参数,它控制模型参数在每次迭代中的更新幅度。如果学习率过大,可能会导致模型在训练过程中的振荡,进而影响到收敛速度;如果…...
Arris VAP2500 list_mac_address未授权RCE漏洞复现
0x01 产品简介 Arris VAP2500是美国Arris集团公司的一款无线接入器产品。 0x02 漏洞概述 Arris VAP2500 list_mac_address接口处命令执行漏洞,未授权的攻击者可通过该漏洞在服务器端任意执行代码,写入后门,获取服务器权限,进而控制整个web服务器。 0x03 复现环境 FOFA…...
【Jenkins】节点 node、凭据 credentials、任务 job
一、节点 node Jenkins在安装并初始化完成后,会有一个主节点(Master Node),默认情况下主节点可以同时运行的任务数是2,可以在节点配置中修改(系统管理/节点和云管理)。 Jenkins中的节点&#…...
华为OD机试 - 高效货运(Java JS Python C)
题目描述 老李是货运公司承运人,老李的货车额定载货重量为 wt。 现有两种货物: 货物 A 单件重量为 wa,单件运费利润为 pa货物 B 单件重量为 wb,单件运费利润为 pb老李每次发车时载货总重量刚好为货车额定的载货重量 wt,车上必须同时有货物 A 和货物 B ,货物A、B不可切割…...
基于python netmiko去ssh备份网络设备配置
自己为了便利写出来的基于python netmiko去ssh备份网络设备配置,用过secureCRT的脚本去备份设备配置,但是它没有图形化界面,使用不方便,自己就重新用python开发了一个,同时用pyinstaller打包成可执行程序(这…...
【CCF BDCI 2023】多模态多方对话场景下的发言人识别 Baseline 0.71 Slover 部分
【CCF BDCI 2023】多模态多方对话场景下的发言人识别 Baseline 0.71 Slover 部分 概述Solver 在多模态发言人识别中的作用Solver 在多模态发言人识别中的重要性Solver 的工作原理 二次规划二次规划的基本形式二次规划的特点二次规划在多模态发言中的应用 (我的理解) 代码详解数…...
爬虫工作量由小到大的思维转变---<第十二章 Scrapy之sql存储与爬虫高效性的平衡艺术>
前言: (本文仅属于技术性探讨,不属于教文) 刚好,前阵子团队还在闲聊这个问题呢。你知道吗,在数据收集这个行当里,怎么存数据这问题就跟“先有鸡还是先有蓝”一样,没完没了的循环往复。老规矩,咱们先搞清楚我们的“鸡…...
修改Docker0和容器的地址
修改Docker0和容器的地址 1. 需求 默认服务器安装完Docker-ce后会给docker0分配172.17.0.1/16地址. 公司新接入一个网段正好与172.17.0.1/16冲突,此时访问这台服务器的容器时就会发生网络不可达. 2. 解决方法 修改/etc/docker/daemon.json 加入一个自定义网段 vim /etc/d…...
弹性网络优化算法
3.3、Elastic-Net算法使用 这是scikit-learn官网给出的弹性网络回归的,损失函数公式,注意,它用的矩阵表示,里面用到范数运算。 min w 1 2 n samples ∣ ∣ X w − y ∣ ∣ 2 2 α ρ ∣ ∣ w ∣ ∣ 1 α ( 1 − ρ ) 2 ∣ ∣…...
[C语言]大小端及整形输出问题
假设在一个32位little endian 的机器上运行下面的程序,结果是多少 ? 1.1先看以下三个程序 #include <stdio.h> int main() {long long a 1, b 2, c 3;printf("%lld %lld %lld\n", a, b, c); // 1 2 3printf("%d %d %d %d %d %d\n&quo…...
C# 命令行参数解析库示例
写在前面 在日常开发中,我们经常会用到命令行参数,比如cmd下的各种指令;还有C#的控制台类型的项目,在默认入口Main函数中,那个args参数,就是有系统传入到程序进程的命令行参数;在传入的参数相对…...
2020 年网络安全应急响应分析报告
2020 年全年奇安信集团安服团队共参与和处置了全国范围内 660起网络安全应急响应事件。2020 年全年应急响应处置事件行业 TOP3 分别为:政府部门行业(146 起)医疗卫生行业(90 起)以及事业单位(61 起,事件处置数分别占应急处置所有行业的 22.1%、13.6%、9.2%。2020 年…...
Git----学习Git第一步基于 Windows 10 系统和 CentOS7 系统安装 Git
查看原文 文章目录 基于 Windows 10 系统安装 Git 客户端基于 CentOS7 系统安装部署 Git 基于 Windows 10 系统安装 Git 客户端 (1)打开 git官网 ,点击【windows】 (2)根据自己的电脑选择安装,目前一般w…...
爬虫 scrapy ——scrapy shell调试及下载当当网数据(十一)
目录 一、scrapy shell 1.什么是scrapy shell? 2.安装 ipython 3.使用scrapy shell 二、当当网案例 1.在items.py中定义数据结构 2.在dang.py中解析数据 3.使用pipeline保存 4.多条管道的使用 5.多页下载 参考 一、scrapy shell 1.什么是scrapy shell&am…...
Linux驱动(中断、异步通知):红外对射,并在Qt StatusBus使用指示灯进行显示
本文工作: 1、Linux驱动与应用程序编写:使用了设备树、中断、异步通知知识点,实现了红外对射状态的异步信息提醒。 2、QT程序编写:自定义了一个“文本指示灯”类,并放置在QMainWidget的StatusBus中。 3、C与C混合编程与…...
echarts地图的常见用法:基本使用、区域颜色分级、水波动画、区域轮播、给地图添加背景图片和图标、3d地图、飞线图
前言 最近几天用echarts做中国地图,就把以前写的demo:在vue中实现中国地图 拿来用,结果到项目里直接报错了,后来发现是因为版本的问题,没办法只能从头进行踩坑了。以下内容基于vue3 和 echarts 5.32 基本使用 获取地…...
进程间通讯-管道
介绍 管道(Pipe)是操作系统提供的一种进程间通信(IPC,Inter-Process Communication)机制,它允许一个进程的输出直接作为另一个进程的输入。管道主要分为以下两种类型: 无名管道(Unn…...
项目总结-自主HTTP实现
终于是写完了,花费了2周时间,一点一点看,还没有扩展,但是基本功能是已经实现了。利用的是Tcp为网络链接,在其上面又写了http的壳。没有使用epoll,多路转接难度比较高,以后有机会再写,…...
Java语言+二维数组+非递归实现五子棋游戏
以前做过一个C语言版五子棋:C语言+二维数组+非递归实现五子棋游戏 现在做一个Java语言版五子棋,规则如下: 1、白子为O; 2、黑子为; 3、白子先手;…...
authentik:破解企业身份治理技术债的架构方案
authentik:破解企业身份治理技术债的架构方案 【免费下载链接】authentik The authentication glue you need. 项目地址: https://gitcode.com/GitHub_Trending/au/authentik 面对日益复杂的身份认证需求,技术决策者常常陷入两难:选择…...
Auto-Photoshop-StableDiffusion-Plugin:在Photoshop中无缝集成AI图像生成的技术实现方案
Auto-Photoshop-StableDiffusion-Plugin:在Photoshop中无缝集成AI图像生成的技术实现方案 【免费下载链接】Auto-Photoshop-StableDiffusion-Plugin A user-friendly plug-in that makes it easy to generate stable diffusion images inside Photoshop using eithe…...
如何高效解析和生成PSD文件:Ag-PSD库完整指南
如何高效解析和生成PSD文件:Ag-PSD库完整指南 【免费下载链接】ag-psd Javascript library for reading and writing PSD files 项目地址: https://gitcode.com/gh_mirrors/ag/ag-psd 在当今数字设计工作流中,Photoshop文档(PSD&#…...
CMake文件操作全攻略:从读取到加密,这些命令让你的项目更高效
CMake文件操作全攻略:从读取到加密,这些命令让你的项目更高效 在构建系统领域,CMake已经成为了事实上的标准工具。但很多开发者仅仅停留在基础的add_executable和target_link_libraries使用层面,忽视了CMake强大的文件操作能力。实…...
图像传感器噪声全解析:从原理到降噪实战
1. 图像传感器噪声的底层逻辑 每次按下手机快门时,你可能不知道图像传感器正在经历一场电子风暴。就像老式收音机的沙沙声,图像传感器也会产生各种"电子噪音"。这些噪声直接影响照片质量,尤其在弱光环境下更为明显。 我拆解过上百款…...
RWKV7-1.5B-g1a作品分享:多轮追问下保持主题聚焦的能力验证
RWKV7-1.5B-g1a作品分享:多轮追问下保持主题聚焦的能力验证 1. 模型简介与测试背景 rwkv7-1.5B-g1a是基于RWKV-7架构的多语言文本生成模型,特别适合基础问答、文案续写、简短总结和轻量中文对话场景。本次测试将重点验证该模型在多轮对话中保持主题聚焦…...
告别硬件!用Proteus8.9和VSPD虚拟串口,5分钟搞定51单片机串口通信仿真
零成本玩转51单片机串口通信:Proteus与VSPD虚拟串口实战指南 记得刚接触单片机开发时,最头疼的就是硬件问题——买开发板要钱,买USB转串口模块要钱,连杜邦线都得精打细算。直到发现ProteusVSPD这对黄金组合,才明白原来…...
VibeVoice语音合成实战:流式播放+音频下载,打造个性化语音播报系统
VibeVoice语音合成实战:流式播放音频下载,打造个性化语音播报系统 1. 项目概述 VibeVoice-Realtime是微软开源的一款轻量级实时语音合成(TTS)模型,专为需要即时语音反馈的场景设计。这个只有0.5B参数的模型,却能在300毫秒内开始…...
突破式3步实现:用MOOTDX构建零成本金融数据获取引擎
突破式3步实现:用MOOTDX构建零成本金融数据获取引擎 【免费下载链接】mootdx 通达信数据读取的一个简便使用封装 项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx 在金融数据分析领域,数据获取一直是从业者面临的核心挑战。无论是量化交…...
如何用零配置小熊猫Dev-C++在5分钟内开启C++编程:完整新手指南
如何用零配置小熊猫Dev-C在5分钟内开启C编程:完整新手指南 【免费下载链接】Dev-CPP A greatly improved Dev-Cpp 项目地址: https://gitcode.com/gh_mirrors/dev/Dev-CPP 对于C初学者来说,最大的障碍往往不是语法本身,而是复杂的环境…...
