实现单链表的增删查改。

目录如下:

singleLink.go

package link

import (
"fmt"
) //HeroNode 链表节点
type HeroNode struct {
ID int
Name string
next *HeroNode //指针
} //InsertHeroNode 插入
func InsertHeroNode(head *HeroNode, newHeroNode *HeroNode) {
tmp := head
for {
if tmp.next == nil {
break
}
tmp = tmp.next
}
tmp.next = newHeroNode
} //InsertHeroNodeByID 根据id从小到大插入
func InsertHeroNodeByID(head *HeroNode, newHeroNode *HeroNode) {
tmp := head for {
if tmp.next == nil {
tmp.next = newHeroNode
break
}
if tmp.next.ID > newHeroNode.ID {
tmp2 := tmp.next
tmp.next = newHeroNode
newHeroNode.next = tmp2
break
} else if tmp.next.ID == newHeroNode.ID {
fmt.Printf("已经存在id为%d的节点\n", tmp.next.ID)
break
} else {
tmp = tmp.next
}
} } //DeleteHeroNode 删除
func DeleteHeroNode(head *HeroNode, ID int) {
tmp := head
for {
if tmp.next == nil {
fmt.Println("链表中没有该id")
break
}
if tmp.next.ID == ID {
if tmp.next.next == nil {
tmp.next = nil
} else {
tmp2 := tmp.next.next
tmp.next = tmp2
}
break
} else {
tmp = tmp.next
}
}
} //FindHeroNode 查找
func FindHeroNode(head *HeroNode, ID int) {
tmp := head
for {
if tmp.next == nil {
fmt.Println("链表中没有该id")
break
}
if tmp.next.ID == ID {
fmt.Println("找到了该id")
break
} else {
tmp = tmp.next
}
}
} //ModifyHeroNode 修改
func ModifyHeroNode(head *HeroNode, ID int, changeName string) {
tmp := head
for {
if tmp.next == nil {
fmt.Println("链表中没有该id")
break
}
if tmp.next.ID == ID {
tmp.next.Name = changeName
break
} else {
tmp = tmp.next
}
}
} //ListHeroNode 显示信息
func ListHeroNode(head *HeroNode) {
tmp := head
if tmp.next == nil {
fmt.Println("链表为空")
return
}
for {
fmt.Printf("节点信息如下:id=%d,name=%s\n", tmp.next.ID, tmp.next.Name)
tmp = tmp.next
if tmp.next == nil {
fmt.Println("已显示所有信息")
break
}
}
}

main.go

package main

import "go_code/data_structure/link"

func main() {

    head := &link.HeroNode{}
hero1 := &link.HeroNode{
ID: ,
Name: "宋江",
}
hero2 := &link.HeroNode{
ID: ,
Name: "李逵",
}
hero4 := &link.HeroNode{
ID: ,
Name: "林冲",
}
hero3 := &link.HeroNode{
ID: ,
Name: "武松",
}
// link.InsertHeroNode(head, hero1)
// link.InsertHeroNode(head, hero2)
// link.InsertHeroNode(head, hero4)
// link.InsertHeroNode(head, hero3) link.InsertHeroNodeByID(head, hero2)
link.InsertHeroNodeByID(head, hero1)
link.InsertHeroNodeByID(head, hero4)
link.InsertHeroNodeByID(head, hero3)
link.DeleteHeroNode(head, )
link.FindHeroNode(head, )
link.ModifyHeroNode(head, , "我是修改后的英雄")
link.ListHeroNode(head)
}

运行结果:

golang数据结构之单链表的更多相关文章

  1. Python数据结构之单链表

    Python数据结构之单链表 单链表有后继结点,无前继结点. 以下实现: 创建单链表 打印单链表 获取单链表的长度 判断单链表是否为空 在单链表后插入数据 获取单链表指定位置的数据 获取单链表指定元素 ...

  2. javascript数据结构之单链表

    下面是用javascript实现的单链表,但是在输出的时候insert方法中存在问题,chrome的console报错说不能读取空的属性,调试了很久都没有通过,先在这里存着,以后再来修改一下. //数 ...

  3. 数据结构之单链表的实现-java

    一.单链表基本概念 单链表是一种链式存取的数据结构,用一组地址任意的存储单元(一般是非连续存储单元)存放线性表中的数据元素.链表中的数据是以结点来表示的,每个结点的构成:元素data + 指针next ...

  4. 数据结构之单链表(golang版)

    线性表之单链表 package main //线性表中的链式存储结构 //第一个节点为头节点,并不真实保存数据,头节点基本代表了整个链表 import ( "fmt" ) type ...

  5. python 数据结构之单链表的实现

    链表的定义: 链表(linked list)是由一组被称为结点的数据元素组成的数据结构,每个结点都包含结点本身的信息和指向下一个结点的地址.由于每个结点都包含了可以链接起来的地址信息,所以用一个变量就 ...

  6. 数据结构(一) 单链表的实现-JAVA

    数据结构还是很重要的,就算不是那种很牛逼的,但起码得知道基础的东西,这一系列就算是复习一下以前学过的数据结构和填补自己在这一块的知识的空缺.加油.珍惜校园中自由学习的时光.按照链表.栈.队列.排序.数 ...

  7. 数据结构 - 静态单链表的实行(C语言)

    静态单链表的实现 1 静态链表定义 静态链表存储结构的定义如下: /* 线性表的静态链表存储结构 */ #define MAXSIZE 1000 /* 假设链表的最大长度是1000 */ typede ...

  8. 数据结构 - 动态单链表的实行(C语言)

    动态单链表的实现 1 单链表存储结构代码描述 若链表没有头结点,则头指针是指向第一个结点的指针. 若链表有头结点,则头指针是指向头结点的指针. 空链表的示意图: 带有头结点的单链表: 不带头结点的单链 ...

  9. 【数据结构】单链表介绍及leetcode206题反转单链表python实现

    题目传送门:https://leetcode-cn.com/problems/reverse-linked-list/ 文章目录 单链表介绍 链表 概念 种类 优缺点 单链表(slist) leetc ...

随机推荐

  1. java 报错 System.out.printIn 错误: 找不到符号

    java 运行 System.out.printIn() 报错 ,java System.out.println 这是错误示范 !!! System.out.printIn("仔细看看pri ...

  2. phpMyAdmin开启IP地址登录

    根本没有其他文章说的那么麻烦,又是修改配置文件,又是修改首页文件.在根目录下有个libraries文件夹,进去有个config.default.php文件,修改里面的AllowArbitrarySer ...

  3. 如何在linux终端创建文件

    我们都知道可以用mkdir命令创建一个新的目录,但更多时候如果能直接创建一个文件(普通文件)会让人感觉更愉悦:这样就可以不用在去打开一个专门的创建文本文件的软件,然后还要设置文件名,保存路径那样的繁琐 ...

  4. August 25th, 2019. Sunday, Week 35th.

    It's what you do next that counts, not what happens but what you decide to do about it. 重点不是发生了什么,而是 ...

  5. mysqlbinlog-Note

    binlog_format = mixedlog-bin = /data/mysql/mysql-binexpire_logs_days = 7 #binlog过期清理时间max_binlog_siz ...

  6. Python备份脚本(Win10+Python2.7+PyCharm)

    说一下程序来源,是从<Python简明教程>上面看到的程序,试了一下之后,居!然!不!行!!! Google了老半天,也看了好多个博客,也未能解决. 除了一些基本语法问题.字符串中队'\' ...

  7. Node.js module export async function

    一.Demo 1.首先定义 module 文件:bbb.js const fs = require("fs"); function readFileSync() { let res ...

  8. RAC数据库的ORA-27123: Unable To Attach To Shared Memory Segment Linux-x86_64 Error: 22: Invalid argument

    RAC数据库的 ORA-27123: Unable To Attach To Shared Memory Segment Linux-x86_64 Error: 22: Invalid argumen ...

  9. go语言之变量

    1.go的hello world package main //申明开头,表示代码所属包,申明为main包,可以编译为二进制程序 import ( "fmt" ) //导入格式化包 ...

  10. ETCD:运行时重新配置设计

    原文地址:the runtime configuration design 运行时重新配置是分布式系统中最难,最容易出错的部分,尤其是在基于共识(像etcd)的系统中. 阅读并学习关于etcd的运行时 ...