golang数据结构之双链表
目录结构:

doubleLink.go
package link import (
"fmt"
) //HerosNode 链表节点
type HerosNode struct {
ID int
Name string
pre *HerosNode //指针
next *HerosNode //指针
} //InsertHerosNode 插入
func InsertHerosNode(head *HerosNode, newHerosNode *HerosNode) {
tmp := head
for {
if tmp.next == nil {
break
}
tmp = tmp.next
}
tmp.next = newHerosNode
newHerosNode.pre = tmp
} //InsertHerosNodeByID 根据id从小到大插入
func InsertHerosNodeByID(head *HerosNode, newHerosNode *HerosNode) {
tmp := head for {
if tmp.next == nil {
tmp.next = newHerosNode
newHerosNode.pre = tmp
break
}
if tmp.next.ID > newHerosNode.ID {
tmp.next.pre = newHerosNode
newHerosNode.pre = tmp
tmp2 := tmp.next
tmp.next = newHerosNode
newHerosNode.next = tmp2
break
} else if tmp.next.ID == newHerosNode.ID {
fmt.Printf("已经存在id为%d的节点\n", tmp.next.ID)
break
} else {
tmp = tmp.next
}
} } //DeleteHerosNode 删除
func DeleteHerosNode(head *HerosNode, 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
tmp2.pre = tmp
}
break
} else {
tmp = tmp.next
}
}
} //FindHerosNode 查找
func FindHerosNode(head *HerosNode, 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
}
}
} //ModifyHerosNode 修改
func ModifyHerosNode(head *HerosNode, 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
}
}
} //ForListHerosNode 显示信息
func ForListHerosNode(forHead *HerosNode) {
fmt.Println("正向打印所有信息")
tmp := forHead
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
}
}
} //BackListHerosNode 显示信息
func BackListHerosNode(head *HerosNode) {
fmt.Println("----------------------")
fmt.Println("反向打印所有信息")
tmp := head
if tmp.next == nil {
fmt.Println("链表为空")
return
}
var backHead *HerosNode
for {
tmp = tmp.next
if tmp.next == nil {
backHead = tmp
break
}
}
for {
fmt.Printf("节点信息如下:id=%d,name=%s\n", backHead.ID, backHead.Name)
backHead = backHead.pre
if backHead.pre == head {
fmt.Printf("节点信息如下:id=%d,name=%s\n", backHead.ID, backHead.Name)
fmt.Println("已显示所有信息")
break
}
}
}
main.go
package main
import "go_code/data_structure/link"
func main() {
head := &link.HerosNode{}
hero1 := &link.HerosNode{
ID: ,
Name: "宋江",
}
hero2 := &link.HerosNode{
ID: ,
Name: "李逵",
}
hero4 := &link.HerosNode{
ID: ,
Name: "林冲",
}
hero3 := &link.HerosNode{
ID: ,
Name: "武松",
}
// link.InsertHerosNode(head, hero1)
// link.InsertHerosNode(head, hero2)
// link.InsertHerosNode(head, hero4)
// link.InsertHerosNode(head, hero3)
link.InsertHerosNodeByID(head, hero2)
link.InsertHerosNodeByID(head, hero1)
link.InsertHerosNodeByID(head, hero4)
link.InsertHerosNodeByID(head, hero3)
link.DeleteHerosNode(head, )
link.FindHerosNode(head, )
link.ModifyHerosNode(head, , "我是修改后的英雄")
link.ForListHerosNode(head)
link.BackListHerosNode(head)
}
运行结果:

golang数据结构之双链表的更多相关文章
- Java 数据结构之双链表
package Linked; public class Mylinked { private Node first;//链表的第一个节点 private Node last;//链表的最后一个节点 ...
- golang数据结构之单链表
实现单链表的增删查改. 目录如下: singleLink.go package link import ( "fmt" ) //HeroNode 链表节点 type HeroNod ...
- 数据结构图文解析之:数组、单链表、双链表介绍及C++模板实现
0. 数据结构图文解析系列 数据结构系列文章 数据结构图文解析之:数组.单链表.双链表介绍及C++模板实现 数据结构图文解析之:栈的简介及C++模板实现 数据结构图文解析之:队列详解与C++模板实现 ...
- C# 数据结构 - 单链表 双链表 环形链表
链表特点(单链表 双链表) 优点:插入和删除非常快.因为单链表只需要修改Next指向的节点,双链表只需要指向Next和Prev的节点就可以完成插入和删除操作. 缺点:当需要查找某一个节点的时候就需要一 ...
- 深入理解Redis 数据结构—双链表
在 Redis 数据类型中的列表list,对数据的添加和删除常用的命令有 lpush,rpush,lpop,rpop,其中 l 表示在左侧,r 表示在右侧,可以在左右两侧做添加和删除操作,说明这是一个 ...
- [C++11][数据结构]自己的双链表实现
这个双链表,是我模仿stl的list制作的,只实现了一些基本功能,像merge,transfer这些就没有实现,用户可以用基本操作来自己做外部实现. 我没有选用stl的[begin,end)迭代器模式 ...
- 数据结构(C达到)------- 双链表
双链表中的每个节点包含两个指针域,指针域包含其后继节点的内存地址,还有一个指针所存储的存储器地址其领域前驱节点. 双向链表结点的类型描写叙述: //双向链表的类型描写叙述 typedef int El ...
- 数据结构与算法之PHP实现链表类(单链表/双链表/循环链表)
链表是由一组节点组成的集合.每个节点都使用一个对象的引用指向它的后继.指向另一个节点的引用叫做链表. 链表分为单链表.双链表.循环链表. 一.单链表 插入:链表中插入一个节点的效率很高.向链表中插 ...
- Python与数据结构[0] -> 链表/LinkedList[1] -> 双链表与循环双链表的 Python 实现
双链表 / Doubly Linked List 目录 双链表 循环双链表 1 双链表 双链表和单链表的不同之处在于,双链表需要多增加一个域(C语言),即在Python中需要多增加一个属性,用于存储指 ...
随机推荐
- Flutter速记
一.安装 参考https://www.jianshu.com/p/cda416e2fc0d 二.换图标 三.打包 参考:https://www.cnblogs.com/shuang ...
- python之os模块(os.path)
我们在做自动化测试的时候,可能会遇到一些需要处理文件一些需求,那么我们可以通过直接写文件的目录进行操作,当然作为一名自动化测试工程师,怎么可能用这种方法?python中自带的有OS,我们可以通过os模 ...
- 使用python执行系统命令——subprocess
背景:subprocess是python官方推荐调用系统命令的模块 import subprocess subprocess最主要的两个方法/类: # 参数说明:stdin和stdout相当于一个管 ...
- 浮点运算与boost.multiprecision
在C++中,float占4个字节,double占8个字节,均采用 IEEE 754 浮点标准:内部都是以二进制为基础,表述实数,有些实数可以被精确表述,比如0.2,但有些不行,比如0.3.针对这一点, ...
- 字典树(Trie)详解
详解字典树(Trie) 本篇随笔简单讲解一下信息学奥林匹克竞赛中的较为常用的数据结构--字典树.字典树也叫Trie树.前缀树.顾名思义,它是一种针对字符串进行维护的数据结构.并且,它的用途超级广泛.建 ...
- kettle抽取数据发送邮件Linux调度
kettle抽取数据发送邮件Linux调度 #1.进入kettle安装目录 然后执行sqoop.sh文件启动kettlecd /app/pdi-ce-7.1.0.0-12/data-integrati ...
- 基于appium的fixture应用之代码重构
一.痛点分析 在appium自动化中,会话启动参数较多,我们使用了yaml配置文件来进行管理,并使用了PyYaml模块进行yaml文件内容的读取,我们知道,在测试场景中,不可能只会用到一种启动类型的参 ...
- 【Unity游戏开发】接入UWA_GOT的iOS版SDK以后无法正常出包
一.正文 问: RT,最近有看到UWA_GOT工具新增了iOS版本的支持,于是下载了最新的工具包进行了接入测试.是按照文档直接将UWA_GOTv2.0.1_iOS.unitypackage导入进了Un ...
- windowsServer---- 在iis 上安装网站
1.找到信息服务IIS 管理器如图: 2.进入后进行配置 3.添加本地网站 配置网站 如果域名没有解析的话,可以在添加一个 端口用于测试 点击浏览就行查看 如果报错 解决:找到目录浏览,并启动 点击 ...
- docker 部署springcloud项目
一.首先从 docker.hub[地址:https://hub.docker.com] 中根据各自的需求 pull 对应的 openjdk镜像(本次直接在修改后的docker镜像源中下载) docke ...