链表的实现(go语言)

devtools/2024/10/20 18:59:25/

摘要: 本文记录使用go语言对链表的实现。

链表的实现

节点结构

type Node struct {Data intNext *Node
}

新建节点

func NewNode(Data int) *Node {return &Node{Data: Data,Next: nil,}
}

尾部添加节点

在这里插入图片描述

// 尾部插入
func Append(head *Node, Data int) *Node {var cur = headfor cur.Next != nil {cur = cur.Next}var newNode = NewNode(Data)newNode.Next = cur.Nextcur.Next = newNodereturn head
}

头部添加节点

在这里插入图片描述

func PreAdd(head *Node, Data int) *Node {newNode := NewNode(Data)if head == nil {return newNode}newNode.Next = headreturn newNode}

查看长度

func Length(head *Node) int {if IsEmpty(head) {return 0}var cur = headvar length intfor cur != nil {length++cur = cur.Next}return length}

判断是否为空

func IsEmpty(head *Node) bool {if head == nil {return true}return false
}

判断是否包含指定值

func Contain(head *Node, Data int) bool {if IsEmpty(head) {return false}var cur = headfor cur != nil {if cur.Data == Data {return true}cur = cur.Next}return false
}

删除节点

func Delete(head *Node, Data int) *Node {if head == nil {return head}// 判断是否包含值if !Contain(head, Data) {![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/ba2d6c3a26bc47f18d82f484f93674a2.png)return head}// 如果头部节点就是要删除的节点if head.Data == Data {return head.Next}var pre = headvar cur = head.Nextfor cur != nil {if cur.Data == Data {pre.Next = cur.Nextreturn head}pre = curcur = cur.Next}return head}

完整代码

package mainimport ("fmt"
)/*1. 新建节点
2. 尾部添加节点
3. 头部添加节点
4. 查看长度
5. 判断是否为空
6. 判断是否包含指定值
7. 删除节点*/type Node struct {Data intNext *Node
}func NewNode(Data int) *Node {return &Node{Data: Data,Next: nil,}
}func PreAdd(head *Node, Data int) *Node {newNode := NewNode(Data)if head == nil {return newNode}newNode.Next = headreturn newNode}// 尾部插入
func Append(head *Node, Data int) *Node {var cur = headfor cur.Next != nil {cur = cur.Next}var newNode = NewNode(Data)newNode.Next = cur.Nextcur.Next = newNodereturn head
}// 遍历链表
func PrintList(head *Node) {if head == nil {return}cur := headfor cur != nil {fmt.Printf("%v ", cur.Data)cur = cur.Next}fmt.Println()
}func IsEmpty(head *Node) bool {if head == nil {return true}return false}func Length(head *Node) int {if IsEmpty(head) {return 0}var cur = headvar length intfor cur != nil {length++cur = cur.Next}return length}func Contain(head *Node, Data int) bool {if IsEmpty(head) {return false}var cur = headfor cur != nil {if cur.Data == Data {return true}cur = cur.Next}return false
}func Delete(head *Node, Data int) *Node {if head == nil {return head}// 判断是否包含值if !Contain(head, Data) {return head}// 如果头部节点就是要删除的节点if head.Data == Data {return head.Next}var pre = headvar cur = head.Nextfor cur != nil {if cur.Data == Data {pre.Next = cur.Nextreturn head}pre = curcur = cur.Next}return head}func main() {head := NewNode(1)head = PreAdd(head, 2)head = PreAdd(head, 3)head = PreAdd(head, 4)head = PreAdd(head, 5)PrintList(head) // 5 4 3 2 1length := Length(head)fmt.Println("length=", length)fmt.Println(Contain(head, 4))head2 := NewNode(1)head2 = Append(head2, 2)head2 = Append(head2, 3)head2 = Append(head2, 4)head2 = Append(head2, 5)PrintList(head2)length = Length(head2)fmt.Println("length=", length)fmt.Println(Contain(head2, 1))fmt.Println(Contain(head2, 5))fmt.Println(Contain(head2, 10))head2 = Delete(head2, 5)PrintList(head2)}

http://www.ppmy.cn/devtools/122186.html

相关文章

五种IO模型与阻塞IO

一、前言 在网络中通信的本质其实是网络中的两台主机的进程间进行通信,而进程通信的本质就是IO。 IO分为输入(input)和输出(output)站在进程的角度讲,进程出去数据为输出,外部数据进入进程为输…

Docker学习路线

一、基础概念阶段 了解 Docker 是什么 认识 Docker 是一种容器化技术,能够将应用程序及其依赖打包到一个可移植的容器中。明白容器与传统虚拟机的区别,例如容器更轻量级、启动速度更快等。 安装 Docker 根据你的操作系统(Windows、macOS 或 …

Sollong手机——一站式Web3生态解决方案

从定义上讲,Web3公司也属于互联网公司,不过与传统互联网公司相比,他们有一个很明显的特征:他们不断尝试做去中心化的事,一步步将数据和金融的控制权从美联储(央行和金融机构)、苹果(…

蓝桥杯【物联网】零基础到国奖之路:十二. TIM

蓝桥杯【物联网】零基础到国奖之路:十二. TIM 第一节 理论知识第二节 cubemx配置 第一节 理论知识 STM32L071xx器件包括4个通用定时器、1个低功耗定时器(LPTIM)、2个基本定时器、2个看门狗定时器和SysTick定时器。 通用定时器(TIM2、TIM3、…

电商选品/分析| 亚马逊常见插件爬虫实战之-helium插件

说明 插件爬虫相当于二次爬虫,二次加工信息,因为大部分插件信息也是从正规网上去获取数据,这次列举helium插件爬虫案例,其他插件爬虫也是类似这个方式. 需求 1、⽤⾕歌浏览器,下载chrome extension:“Helium 10 2、登录helium10 3、打开 打开Amazon⾸⻚搜索women clothe…

MAC的几个常见的快捷方式

1.mac 查看图片好的方式 默认查看图片的方式无法直接切换上一张下一张 解决方法: 1.(最好的方法)选中图片直接按空格,进入快速预览图片 2.就是全部选中然后打开,但是说实话有点奇怪,而且很占内存 3.直接显示…

CSS——属性值计算

CSS——属性值计算 今天来详细讲解一下 CSS的属性值计算过程,这是 CSS 的核心之一(另一个是视觉可视化模型,个人理解,这个相对复杂,以后再讲)。 基本概念 层叠样式表:Cascade Style Sheet&am…