设为首页收藏本站
网站公告 | 这是第一条公告
     

 找回密码
 立即注册
缓存时间02 现在时间02 缓存数据 曾经在《火星情报局》 汪涵问粉丝们“你们会喜欢薛之谦多久”粉丝们都大喊“一辈子” 当时的薛之谦就笑着说“你们骗人”结果,你们真的骗人。

曾经在《火星情报局》 汪涵问粉丝们“你们会喜欢薛之谦多久”粉丝们都大喊“一辈子” 当时的薛之谦就笑着说“你们骗人”结果,你们真的骗人。 -- 我好像在哪见过你

查看: 1418|回复: 4

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

[复制链接]

  离线 

TA的专栏

  • 打卡等级:热心大叔
  • 打卡总天数:205
  • 打卡月天数:0
  • 打卡总奖励:3143
  • 最近打卡:2023-08-27 04:25:52
等级头衔

等級:晓枫资讯-上等兵

在线时间
0 小时

积分成就
威望
0
贡献
361
主题
337
精华
0
金钱
4199
积分
723
注册时间
2022-12-25
最后登录
2025-3-13

发表于 2024-5-22 04:01:06 | 显示全部楼层 |阅读模式
单链表(Single Linked List)是链表数据结构的一种实现方式,它包含一系列节点(Node),每个节点都包含一个数据域和一个指向下一个节点的指针。与数组相比,链表的一个主要优点是它们可以动态地进行扩展和收缩,因为它们的元素在内存中不是连续存储的。
通过定义结构体实现单链表的操作,no为链表中节点的id,name为节点id对应的内容,next为下一个节点的信息
  1. type HeroNode struct {
  2.         no   int
  3.         name string
  4.         next *HeroNode
  5. }
复制代码
InputNode方法,为链表添加节点。通过定义辅助节点,找到链表的最后一个节点,并将要添加的节点添加到找到的节点的下一个节点。
  1. func InputNode(head *HeroNode, hero *HeroNode) {
  2.         text := head
  3.         for {
  4.                 if text.next == nil {
  5.                         break
  6.                 }
  7.                 text = text.next
  8.         }
  9.         text.next = hero
  10. }
复制代码
InputNode2方法,为链表顺序添加节点。首先还是定义一个辅助节点,这次还另外定义一个flag为了判断要插入的节点是否已经存在。通过辅助节点进行判断插入的节点的id,并进行插入对应位置。这里要注意的是需要先将要插入的节点的下一个节点改为辅助节点的下一个节点,然后再将辅助节点的下一个节点换为要插入的节点。一旦先将text.next=hero,原本text后面的节点将会失去前置节点,那么hero节点将添加失败
  1. func InputNode2(head *HeroNode, hero *HeroNode) {
  2.         text := head
  3.         flag := true
  4.         //让插入的节点的no,和text的下一个节点的no进行比较
  5.         for {
  6.                 if text.next == nil {
  7.                         break
  8.                 } else if text.next.no > hero.no {
  9.                         //说明hero应该插入到text后面
  10.                         break
  11.                 } else if text.next.no == hero.no {
  12.                         flag = false
  13.                         break
  14.                 }
  15.                 text = text.next
  16.         }
  17.         if !flag {
  18.                 fmt.Println("已经存在", hero.no)
  19.                 return
  20.         } else {
  21.                 hero.next = text.next
  22.                 text.next = hero
  23.         }
  24. }
复制代码
DelectNode方法,删除链表中的节点。通过定义辅助节点和flag进行对要删除节点的查询,查询后将text的下一个节点指向text下一个节点的下一个节点即可完成节点的删除。
  1. func DelectNode(hero *HeroNode, id int) {
  2.         text := hero
  3.         flag := false
  4.         for {
  5.                 if text.next == nil {
  6.                         break
  7.                 } else if text.next.no == id {
  8.                         //说明找到了
  9.                         flag = true
  10.                         break
  11.                 }
  12.                 text = text.next
  13.         }
  14.         if flag {
  15.                 text.next = text.next.next
  16.         } else {
  17.                 fmt.Println("删除id不存在", id)
  18.         }
  19. }
复制代码
ShowNode方法,实现显示链表中的节点。先判断链表是否为空链表然后进行链表的打印输出,直到链表为空。
  1. func ShowNode(head *HeroNode) {
  2.         //        创建一个辅助节点
  3.         text := head
  4.         //        判断是否为空链表
  5.         if text.next == nil {
  6.                 fmt.Println("空链表")
  7.                 return
  8.         }
  9.         for {
  10.                 fmt.Printf("[%d ,%s ]==>", text.next.no, text.next.name)
  11.                 text = text.next
  12.                 if text.next == nil {
  13.                         break
  14.                 }
  15.         }
  16. }
复制代码
主函数。定义了一个根节点head,定义了5个要添加的节点,并将他们按照顺序添加,之后打印显示出整个链表,然后删除掉节点id为"1"的数据,并再次打印显示链表。
  1. func main() {
  2.         //        创建根节点
  3.         head := &HeroNode{}
  4.         hero1 := &HeroNode{
  5.                 no:   1,
  6.                 name: "张明",
  7.         }
  8.         hero2 := &HeroNode{
  9.                 no:   2,
  10.                 name: "李华",
  11.         }
  12.         hero3 := &HeroNode{
  13.                 no:   3,
  14.                 name: "王五",
  15.         }
  16.         hero4 := &HeroNode{
  17.                 no:   4,
  18.                 name: "张三",
  19.         }
  20.         hero5 := &HeroNode{
  21.                 no:   5,
  22.                 name: "花花",
  23.         }
  24.         InputNode2(head, hero1)
  25.         InputNode2(head, hero2)
  26.         InputNode2(head, hero3)
  27.         InputNode2(head, hero4)
  28.         InputNode2(head, hero5)
  29.         ShowNode(head)
  30.         fmt.Println()
  31.         DelectNode(head, 1)
  32.         ShowNode(head)
  33. }
复制代码
整体代码的实现
1.png

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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
晓枫资讯-科技资讯社区-免责声明
免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
      1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
      2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
      3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:点击这里给我发消息进行删除处理。
      4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
      5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

  离线 

TA的专栏

等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
0
主题
0
精华
0
金钱
12
积分
4
注册时间
2023-10-29
最后登录
2023-10-29

发表于 2024-7-8 03:02:43 | 显示全部楼层
路过,支持一下
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

  离线 

TA的专栏

等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
0
主题
0
精华
0
金钱
27
积分
14
注册时间
2022-12-21
最后登录
2022-12-25

发表于 2025-3-5 14:22:12 | 显示全部楼层
顶顶更健康!!!
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

  离线 

TA的专栏

  • 打卡等级:即来则安
  • 打卡总天数:25
  • 打卡月天数:1
  • 打卡总奖励:315
  • 最近打卡:2025-07-02 19:02:00
等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
0
主题
0
精华
0
金钱
359
积分
52
注册时间
2023-2-25
最后登录
2025-7-2

发表于 2025-3-20 00:44:41 | 显示全部楼层
感谢楼主分享。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

  离线 

TA的专栏

等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
0
主题
0
精华
0
金钱
16
积分
12
注册时间
2023-5-9
最后登录
2023-5-9

发表于 2025-4-10 17:31:16 | 显示全部楼层
感谢楼主,顶。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~
严禁发布广告,淫秽、色情、赌博、暴力、凶杀、恐怖、间谍及其他违反国家法律法规的内容。!晓枫资讯-社区
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1楼
2楼
3楼
4楼
5楼

手机版|晓枫资讯--科技资讯社区 本站已运行

CopyRight © 2022-2025 晓枫资讯--科技资讯社区 ( BBS.yzwlo.com ) . All Rights Reserved .

晓枫资讯--科技资讯社区

本站内容由用户自主分享和转载自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

如有侵权、违反国家法律政策行为,请联系我们,我们会第一时间及时清除和处理! 举报反馈邮箱:点击这里给我发消息

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表