当前位置: 首页 > news >正文

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 的机器上运行下面的程序&#xff0c;结果是多少 ? 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# 命令行参数解析库示例

写在前面 在日常开发中&#xff0c;我们经常会用到命令行参数&#xff0c;比如cmd下的各种指令&#xff1b;还有C#的控制台类型的项目&#xff0c;在默认入口Main函数中&#xff0c;那个args参数&#xff0c;就是有系统传入到程序进程的命令行参数&#xff1b;在传入的参数相对…...

2020 年网络安全应急响应分析报告

2020 年全年奇安信集团安服团队共参与和处置了全国范围内 660起网络安全应急响应事件。2020 年全年应急响应处置事件行业 TOP3 分别为:政府部门行业(146 起)医疗卫生行业(90 起)以及事业单位(61 起&#xff0c;事件处置数分别占应急处置所有行业的 22.1%、13.6%、9.2%。2020 年…...

Git----学习Git第一步基于 Windows 10 系统和 CentOS7 系统安装 Git

查看原文 文章目录 基于 Windows 10 系统安装 Git 客户端基于 CentOS7 系统安装部署 Git 基于 Windows 10 系统安装 Git 客户端 &#xff08;1&#xff09;打开 git官网 &#xff0c;点击【windows】 &#xff08;2&#xff09;根据自己的电脑选择安装&#xff0c;目前一般w…...

爬虫 scrapy ——scrapy shell调试及下载当当网数据(十一)

目录 一、scrapy shell 1.什么是scrapy shell&#xff1f; 2.安装 ipython 3.使用scrapy shell 二、当当网案例 1.在items.py中定义数据结构 2.在dang.py中解析数据 3.使用pipeline保存 4.多条管道的使用 5.多页下载 参考 一、scrapy shell 1.什么是scrapy shell&am…...

Linux驱动(中断、异步通知):红外对射,并在Qt StatusBus使用指示灯进行显示

本文工作&#xff1a; 1、Linux驱动与应用程序编写&#xff1a;使用了设备树、中断、异步通知知识点&#xff0c;实现了红外对射状态的异步信息提醒。 2、QT程序编写&#xff1a;自定义了一个“文本指示灯”类&#xff0c;并放置在QMainWidget的StatusBus中。 3、C与C混合编程与…...

echarts地图的常见用法:基本使用、区域颜色分级、水波动画、区域轮播、给地图添加背景图片和图标、3d地图、飞线图

前言 最近几天用echarts做中国地图&#xff0c;就把以前写的demo&#xff1a;在vue中实现中国地图 拿来用&#xff0c;结果到项目里直接报错了&#xff0c;后来发现是因为版本的问题&#xff0c;没办法只能从头进行踩坑了。以下内容基于vue3 和 echarts 5.32 基本使用 获取地…...

进程间通讯-管道

介绍 管道&#xff08;Pipe&#xff09;是操作系统提供的一种进程间通信&#xff08;IPC&#xff0c;Inter-Process Communication&#xff09;机制&#xff0c;它允许一个进程的输出直接作为另一个进程的输入。管道主要分为以下两种类型&#xff1a; 无名管道&#xff08;Unn…...

项目总结-自主HTTP实现

终于是写完了&#xff0c;花费了2周时间&#xff0c;一点一点看&#xff0c;还没有扩展&#xff0c;但是基本功能是已经实现了。利用的是Tcp为网络链接&#xff0c;在其上面又写了http的壳。没有使用epoll&#xff0c;多路转接难度比较高&#xff0c;以后有机会再写&#xff0c…...

Java语言+二维数组+非递归实现五子棋游戏

以前做过一个C语言版五子棋&#xff1a;&#xff23;语言&#xff0b;二维数组&#xff0b;非递归实现五子棋游戏 现在做一个Java语言版五子棋&#xff0c;规则如下&#xff1a; 1&#xff64;白子为O; 2&#xff64;黑子为&#xff1b; 3&#xff64;白子先手&#xff1b;…...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命

在华东塑料包装行业面临限塑令深度调整的背景下&#xff0c;江苏艾立泰以一场跨国资源接力的创新实践&#xff0c;重新定义了绿色供应链的边界。 跨国回收网络&#xff1a;废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点&#xff0c;将海外废弃包装箱通过标准…...

Spring AI 入门:Java 开发者的生成式 AI 实践之路

一、Spring AI 简介 在人工智能技术快速迭代的今天&#xff0c;Spring AI 作为 Spring 生态系统的新生力量&#xff0c;正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务&#xff08;如 OpenAI、Anthropic&#xff09;的无缝对接&…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

OPENCV形态学基础之二腐蚀

一.腐蚀的原理 (图1) 数学表达式&#xff1a;dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一&#xff0c;腐蚀跟膨胀属于反向操作&#xff0c;膨胀是把图像图像变大&#xff0c;而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

【VLNs篇】07:NavRL—在动态环境中学习安全飞行

项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战&#xff0c;克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...

面向无人机海岸带生态系统监测的语义分割基准数据集

描述&#xff1a;海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而&#xff0c;目前该领域仍面临一个挑战&#xff0c;即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...

【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)

前言&#xff1a; 双亲委派机制对于面试这块来说非常重要&#xff0c;在实际开发中也是经常遇见需要打破双亲委派的需求&#xff0c;今天我们一起来探索一下什么是双亲委派机制&#xff0c;在此之前我们先介绍一下类的加载器。 目录 ​编辑 前言&#xff1a; 类加载器 1. …...

在Zenodo下载文件 用到googlecolab googledrive

方法&#xff1a;Figshare/Zenodo上的数据/文件下载不下来&#xff1f;尝试利用Google Colab &#xff1a;https://zhuanlan.zhihu.com/p/1898503078782674027 参考&#xff1a; 通过Colab&谷歌云下载Figshare数据&#xff0c;超级实用&#xff01;&#xff01;&#xff0…...

【笔记】AI Agent 项目 SUNA 部署 之 Docker 构建记录

#工作记录 构建过程记录 Microsoft Windows [Version 10.0.27871.1000] (c) Microsoft Corporation. All rights reserved.(suna-py3.12) F:\PythonProjects\suna>python setup.py --admin███████╗██╗ ██╗███╗ ██╗ █████╗ ██╔════╝…...