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中select的使用与源码分析

    详解Golang中select的使用与源码分析

    select 是 Go 提供的 IO 多路复用机制,可以用多个 case 同时监听多个 channl 的读写状态。本文将从源码角度带大家了解一下select的使用,需要的可以参考一下
    2022-12-12
  • Golang基础之函数使用(参数传值)实例详解

    Golang基础之函数使用(参数传值)实例详解

    这篇文章主要为大家介绍了Golang基础之函数使用(参数传值)实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • golang中单机锁的具体实现详解

    golang中单机锁的具体实现详解

    这篇文章主要为大家详细介绍了golang中单机锁的具体实现的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-03-03
  • Go Module依赖管理的实现

    Go Module依赖管理的实现

    Go Module是Go语言的官方依赖管理解决方案,其提供了一种简单、可靠的方式来管理项目的依赖关系,本文主要介绍了Go Module依赖管理的实现,感兴趣的可以了解一下
    2024-06-06
  • 详解Golang如何优雅接入多个远程配置中心

    详解Golang如何优雅接入多个远程配置中心

    这篇文章主要为大家为大家介绍了Golang如何优雅接入多个远程配置中心详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • go时间/时间戳操作大全(小结)

    go时间/时间戳操作大全(小结)

    这篇文章主要介绍了go时间/时间戳操作大全,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • Golang中四种gRPC模式举例详解

    Golang中四种gRPC模式举例详解

    gRPC是一种进程间通信技术,在微服务和云原生领域都有着广泛的应用,下面这篇文章主要给大家介绍了关于Golang中四种gRPC模式的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-03-03
  • Golang操作MySql数据库的完整步骤记录

    Golang操作MySql数据库的完整步骤记录

    这篇文章主要给大家介绍了关于Golang操作MySql数据库的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • Go 函数选项模式

    Go 函数选项模式

    在 Go 语言中,函数选项模式(Functional Options Pattern) 是一种优雅的设计模式,用于处理可选配置参数,特别是当配置项较多或可能变化时,它避免了冗长的构造函数参数列表,提高了代码的可读性和可扩展性,本文介绍Go函数选项模式,感兴趣的朋友一起看看吧
    2025-08-08
  • 关于go-zero服务自动收集问题分析

    关于go-zero服务自动收集问题分析

    这篇文章主要介绍了关于go-zero服务自动收集问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-12-12

最新评论