Golang使用切片实现单链表的示例代码

 更新时间:2024年05月21日 09:44:45   作者:不会前端的小李  
单链表(Single Linked List)是链表数据结构的一种实现方式,它包含一系列节点(Node),每个节点都包含一个数据域和一个指向下一个节点的指针,本文给大家介绍了Golang使用切片实现单链表的操作,需要的朋友可以参考下

单链表(Single Linked List)是链表数据结构的一种实现方式,它包含一系列节点(Node),每个节点都包含一个数据域和一个指向下一个节点的指针。与数组相比,链表的一个主要优点是它们可以动态地进行扩展和收缩,因为它们的元素在内存中不是连续存储的。

通过定义结构体实现单链表的操作,no为链表中节点的id,name为节点id对应的内容,next为下一个节点的信息

type HeroNode struct {
	no   int
	name string
	next *HeroNode 
}

InputNode方法,为链表添加节点。通过定义辅助节点,找到链表的最后一个节点,并将要添加的节点添加到找到的节点的下一个节点。

func InputNode(head *HeroNode, hero *HeroNode) {
	text := head
	for {
		if text.next == nil {
			break
		}
		text = text.next
	}
	text.next = hero
}

InputNode2方法,为链表顺序添加节点。首先还是定义一个辅助节点,这次还另外定义一个flag为了判断要插入的节点是否已经存在。通过辅助节点进行判断插入的节点的id,并进行插入对应位置。这里要注意的是需要先将要插入的节点的下一个节点改为辅助节点的下一个节点,然后再将辅助节点的下一个节点换为要插入的节点。一旦先将text.next=hero,原本text后面的节点将会失去前置节点,那么hero节点将添加失败

func InputNode2(head *HeroNode, hero *HeroNode) {
	text := head
	flag := true
	//让插入的节点的no,和text的下一个节点的no进行比较
	for {
		if text.next == nil {
			break
		} else if text.next.no > hero.no {
			//说明hero应该插入到text后面
			break
		} else if text.next.no == hero.no {
			flag = false
			break
		}
		text = text.next
	}
	if !flag {
		fmt.Println("已经存在", hero.no)
		return
	} else {
		hero.next = text.next
		text.next = hero
	}
}

DelectNode方法,删除链表中的节点。通过定义辅助节点和flag进行对要删除节点的查询,查询后将text的下一个节点指向text下一个节点的下一个节点即可完成节点的删除。

func DelectNode(hero *HeroNode, id int) {
	text := hero
	flag := false
	for {
		if text.next == nil {
			break
		} else if text.next.no == id {
			//说明找到了
			flag = true
			break
		}
		text = text.next
	}
	if flag {
		text.next = text.next.next
	} else {
		fmt.Println("删除id不存在", id)
	}
}

ShowNode方法,实现显示链表中的节点。先判断链表是否为空链表然后进行链表的打印输出,直到链表为空。

func ShowNode(head *HeroNode) {
	//	创建一个辅助节点
	text := head
	//	判断是否为空链表
	if text.next == nil {
		fmt.Println("空链表")
		return
	}
	for {
		fmt.Printf("[%d ,%s ]==>", text.next.no, text.next.name)
		text = text.next
		if text.next == nil {
			break
		}
	}
}

主函数。定义了一个根节点head,定义了5个要添加的节点,并将他们按照顺序添加,之后打印显示出整个链表,然后删除掉节点id为"1"的数据,并再次打印显示链表。

func main() {
	//	创建根节点
	head := &HeroNode{}
	hero1 := &HeroNode{
		no:   1,
		name: "张明",
	}
	hero2 := &HeroNode{
		no:   2,
		name: "李华",
	}
	hero3 := &HeroNode{
		no:   3,
		name: "王五",
	}
	hero4 := &HeroNode{
		no:   4,
		name: "张三",
	}
	hero5 := &HeroNode{
		no:   5,
		name: "花花",
	}
	InputNode2(head, hero1)
	InputNode2(head, hero2)
	InputNode2(head, hero3)
	InputNode2(head, hero4)
	InputNode2(head, hero5)
	ShowNode(head)
	fmt.Println()
	DelectNode(head, 1)
	ShowNode(head)
}

整体代码的实现

以上就是Golang使用切片实现单链表的示例代码的详细内容,更多关于Golang切片单链表的资料请关注脚本之家其它相关文章!

相关文章

  • Golang切片连接成字符串的实现示例

    Golang切片连接成字符串的实现示例

    本文主要介绍了Golang切片连接成字符串的实现示例,可以使用Go语言中的内置函数"String()"可以将字节切片转换为字符串,具有一定的参考价值,感兴趣的可以了解一下
    2023-11-11
  • Go语言拼接URL路径的三种方法

    Go语言拼接URL路径的三种方法

    本文主要介绍了Go语言拼接URL路径的三种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • Golang处理parquet文件实战指南

    Golang处理parquet文件实战指南

    这篇文章主要给大家介绍了关于Golang处理parquet文件的相关资料,文中通过实例代码介绍的非常详细,对大家学习或者使用Golang具有一定的参考学习价值,需要的朋友可以参考下
    2023-03-03
  • go语言区块链学习调用以太坊

    go语言区块链学习调用以太坊

    这篇文章主要为大家介绍了go语言区块链学习如何调用以太坊的示例实现过程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2021-10-10
  • 使用pprof分析golang内存泄露问题及解决

    使用pprof分析golang内存泄露问题及解决

    这篇文章主要介绍了使用pprof分析golang内存泄露问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04
  • golang的os包用法详解

    golang的os包用法详解

    Go语言的 os 包中提供了操作系统函数的接口,是一个比较重要的包。顾名思义,os 包的作用主要是在服务器上进行系统的基本操作,本文将详细介绍了golang的os包用法,需要的朋友可以参考下
    2023-05-05
  • 详解Go语言中rand(随机数)包的使用

    详解Go语言中rand(随机数)包的使用

    在Golang中,有两个包提供了rand,分别为math/rand和crypto/rand对应两种应用场景。math/rand包实现了伪随机数生成器。也就是生成 整形和浮点型;crypto/rand包实现了用于加解密的更安全的随机数生成器。本文就来和大家详细讲讲math/rand的使用
    2022-08-08
  • GO实现基于命令行的简单IPS程序代码

    GO实现基于命令行的简单IPS程序代码

    本文介绍了入侵防御系统IPS的工作原理和实现,IPS通过网络流量监控和实时响应,防止网络攻击,通过使用Go语言实现一个简单的IPS示例程序,展示了如何获取本地IP地址和探测网络中其他设备的IP地址,包括如何定义和加载规则文件,以及如何检测IP对相应端口的访问是否达到规定阈值
    2024-12-12
  • golang解析网页利器goquery的使用方法

    golang解析网页利器goquery的使用方法

    这篇文章主要给大家介绍了关于golang解析网页利器goquery的使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考借鉴,下面来一起学习学习吧。
    2017-09-09
  • Go语言中sync.Cond使用详解

    Go语言中sync.Cond使用详解

    本文主要介绍了Go语言中sync.Cond使用详解,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09

最新评论