单向链表的一种Go语言实现

package mainimport "fmt"type Node struct {no intname stringnext *Node
}//实现尾部插入一个节点到链表(队列Push的一种实现)
func InsertTail(head *Node, newNode *Node){//先找到链表的最后一个节点,需要保持头结点不动,这里创建一个中间临时节点temp := head//遍历链表直到最后一个节点进行插入for {if temp.next == nil { //这个条件就是链表的最后位置break}temp = temp.next}//将新的节点接入到链表尾部temp.next = newNode
}//实现有序插入一个节点到链表中
func InsertSort(head, newNode *Node){temp := head//重点:插入时必须要在temp的位置让temp.next.no和newNode.no进行比较,不然会错过插入时机for {if temp.next == nil { //说明已经在链表的尾部了//注意:下面两行的顺序不能颠倒newNode.next = temp.nexttemp.next = newNodebreak} else if temp.next.no >= newNode.no {newNode.next = temp.nexttemp.next = newNodebreak}temp = temp.next}
}//实现头部插入节点(队列Push的一种实现)
func InsertHead(head, newNode *Node){newNode.next = head.nexthead.next = newNode
}//实现一个删除链表节点的函数
func Delete(head *Node, node *Node) {temp := headfor {if temp.next == nil { //说明已经在链表的尾部了,没有找到要删除的节点break} else if temp.next.no == node.no {temp.next = node.next//下面这种方法也可以,不过理解起来有点绕//temp.next = temp.next.nextbreak}temp = temp.next}
}//实现一个头部删除链表节点的函数(队列Pop的一种实现)
func DeleteHead(head *Node){if head.next == nil{return}else {head.next = head.next.next}
}//实现一个尾部删除链表节点的函数(队列Pop的一种实现)
func DeleteTail(head *Node){temp := headfor {if temp.next == nil{ //说明链表为空return}else if temp.next.next == nil{temp.next = nilbreak}temp = temp.next}
}//实现显示链表中所有节点信息
func List(head *Node){//前提是不能改变头结点temp := headif temp.next == nil {fmt.Println("链表为空")return}for {fmt.Printf("%d  %s -->", temp.next.no, temp.next.name) //打印下一个节点的信息temp = temp.nextif temp.next == nil {break}}
}func main(){//定义一个头结点head := &Node{}//定义一个节点信息node1 := &Node{no:   1,name: "Number1",next: nil,}node2 := &Node{no:   2,name: "Number2",next: nil,}node3 := &Node{no:   3,name: "Number3",next: nil,}node4 := &Node{no:   2,name: "Number4",next: nil,}InsertTail(head, node1)InsertTail(head, node2)InsertSort(head, node3)InsertSort(head, node2)InsertSort(head, node1)InsertSort(head, node4)Delete(head, node4)InsertHead(head, node1)InsertHead(head, node2)InsertHead(head, node3)InsertHead(head, node4)DeleteHead(head)DeleteTail(head)List(head)
}

数据结构--单向链表相关推荐

  1. 数据结构-单向链表解决学生录入问题

    数据结构-单向链表 单向链表实现学生录入程序 通过main函数实现一切功能 通过调用函数实现 传送门结束 单向链表实现学生录入程序 将用户输入的不定个数的学生成绩按顺序编号并保存,以用户输入0作为录入 ...

  2. 数据结构单向链表线性结构_线性数据结构链表为何以及如何解释

    数据结构单向链表线性结构 Imagine you have gone to a crowded place, say to a k-pop concert with your friends and ...

  3. 【单向链表】数据结构——单向链表的介绍与代码实现笔记

    从今天开始将修炼数据结构专栏,将持续更新,分模块学习. 数据结构--单向链表 一.数据结构 1.什么是数据结构? 2.逻辑结构和物理结构 二.链表--线性结构 1.首先介绍下链表和数组的区别 2.链表 ...

  4. 简单数据结构——单向链表

    恩,准备重最简单的东西复习和学习一遍.那就从数据结构开始吧. 我尽量用公司的代码标准来进行编码.希望对刚刚开始学习数据结构的有一些帮助吧. 使我的代码可以简单易懂. 我记得上数据结构的第一个程序就是链 ...

  5. 数据结构—单向链表(详解)

    一.链表基础 链表是一种常见的数据结构,其中运用到了结构体指针,链表可以实现动态存储分配,换而言之,链表是一个功能强大的数组,可以在某个节点定义多种数据类型,可以实现任意的添加,删除,插入节点等.链表 ...

  6. 数据结构 | 单向链表学习总结

    单向链表学习总结 简介 总结 链表介绍 链表定义 链表函数 计算链表的长度 将列表转换为链表 LeetCode:剑指 Offer 22. 链表中倒数第k个节点 双向链表学习总结:python | 双向 ...

  7. 数据结构——单向链表

    链表是一种物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的.链表由一系列的结点(链表中的每一个元素称为结点)组成,结点可以在运行时动态生成. 结点API设计 类名 N ...

  8. 数据结构——单向链表-双向链表

    1.单向链表按位置修改 //按位置修改 int updata_pos(linklist *L,int pos,datatype new_e) {if(NULL==L||empty(L)||pos< ...

  9. 数据结构单向链表(C++)

    head文件 #include<iostream> #define status int #define OK 1 #define ERROR 0 using namespace std; ...

最新文章

  1. 获取序列全排列Java,java中全排列的生成算法汇总
  2. 解题报告(二)多项式问题(多项式乘法及其各种运算)(ACM/ OI)超高质量题解
  3. 如何关闭PHP的安全模式,Linux下的Apache和PHP安全设置,如何开启PHP的安全模式
  4. 使用FPM快速生成RPM包
  5. BZOJ4401:块的计数(乱搞)
  6. mysql变更AUTO_INCREMENT值
  7. java课程设计拼图_基于Java拼图游戏的设计与实现(含录像)
  8. java spark yarn_《Spark官方文档》在YARN上运行Spark
  9. 数据挖掘 股价预测_股票成交量很低,但股价跌得快,说明了什么?(此文无价)...
  10. QNAP 修复 NAS 备份应用中的严重漏洞
  11. linux 编程 调度,Linux的进程线程及调度
  12. Oracle表名、列名、约束名的长度限制
  13. 白杨SEO:关键词定位与兴趣定位是什么?这两类推广渠道在网络营销上有什么差异?
  14. STC15单片机使用AT命令的C语言编程
  15. 谷歌搜索技巧大全,google高级搜索语法指令怎么用
  16. 随机搜索 /爬山法/模拟退火/遗传算法
  17. python实现指纹识别毕业论文_指纹识别系统设计毕业论文+开题报告+翻译及原文+设计源码...
  18. 关于电脑网络显示红叉的解决方法
  19. android线程间通信的几种方法_Android进程间和线程间通信方式
  20. 小型仓库管理系统MySQL

热门文章

  1. java 输出_使用IntelliJ IDEA2020.2.2 x64新建java项目并且输出Hello World
  2. 弱电工程项目综合布线估算方法和公式
  3. 火神山医院紧急招募IT运维志愿者需求
  4. 哈工大计算机系女生的宿舍,哈工大的硕博士们,这次被学校折腾惨了!
  5. java中大数开方_Java中的大数运算
  6. 快速学python爬虫_Python爬虫丨应当如何快速高效学习
  7. Python之 sklearn:sklearn中的RobustScaler 函数的简介及使用方法之详细攻略
  8. Bug总结:python语言中出现的import error错误的解决思路
  9. NLP:基于nltk和jieba库对文本实现提取文本摘要(两种方法实现:top_n_summary和mean_scored_summary)
  10. AI公开课:19.05.29 浣军-百度大数据实验室主任《AutoDL 自动化深度学习建模的算法和应用》课堂笔记以及个人感悟