go 链表操作
链表的特点和初始化
链表的特点
用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的)
结点
结点(node)
数据域 => 存储元素信息
指针域 => 存储结点的直接后继,也称作指针或链
首元结点 是指链表中存储的第一个数据元素的结点
头结点 是在首元结点之前附设的一个结点,其指针域指向首元结点(非必须)
头指针 是指向链表中第一个结点的指针

单链表特点
- 每个结点中只包含一个指针域
- 单链表是非随机存取的存储结构,要取得第i个数据元素必须从头指针出发,顺链进行寻找,也称为顺序存取的存取结构
官方包链表操作
https://pkg.go.dev/container/list
手动实现单链表部分操作
// 实现单链表一些基础操作
package main
import (
"errors"
"fmt"
)
// 链表结构
type ListNode struct {
Data int
Next *ListNode
}
// 初始化链表头,下面所有操作都基于带头链表
func NewListNode() *ListNode {
return &ListNode{Next: nil}
}
// 获取链表长度
func (l *ListNode) Length() int {
len := 0
for l.Next != nil {
len++
l = l.Next
}
return len
}
// 插入节点
func (l *ListNode) InsertNode(d int) error {
newNode := new(ListNode)
newNode.Data = d
newNode.Next = l.Next
l.Next = newNode
return nil
}
// 删除节点
func (l *ListNode) DelNode(d int) {
if l == nil {
errors.New("Empty List!")
return
}
for l.Next != nil {
if l.Next.Data == d {
l.Next = l.Next.Next
// return 是否全部删除与d相同数据
}
l = l.Next
}
}
// 遍历单链表
func (l *ListNode) ListNode() {
for l.Next != nil {
fmt.Printf("%d", l.Next.Data)
l = l.Next
}
}
// 递归反转单链表
func ReverseList(pHead, node *ListNode) *ListNode {
if node.Next == nil {
pHead.Next = node
return node
}
if n := ReverseList(pHead, node.Next); n != nil {
n.Next = node
node.Next = nil
}
return node
}
// 遍历反转单链表
func (pHead *ListNode) ReverseListV2() {
pReverseHead := pHead
var pNode = pHead.Next
var pPrev *ListNode
for pNode != nil {
pNext := pNode.Next
if pNext == nil {
pReverseHead.Next = pNode
}
pNode.Next = pPrev
pPrev = pNode
pNode = pNext
}
return
}
go 链表操作的更多相关文章
- JAVA 链表操作:循环链表
主要分析示例: 一.循环链表简述 二.单链表循环链表 三.双链表循环链表 一.循环链表简述 循环链表即链表形成了一个循环的结构,尾节点不再指向NULL,而是指向头节点HEAD,此时判定链表的结束是尾节 ...
- 单链表操作B 分类: 链表 2015-06-07 12:42 15人阅读 评论(0) 收藏
数据结构上机测试2-2:单链表操作B TimeLimit: 1000ms Memory limit: 65536K 题目描述 按照数据输入的相反顺序(逆位序)建立一个单链表,并将单链表中重复的元素删除 ...
- YTU 2620: B 链表操作
2620: B 链表操作 时间限制: 1 Sec 内存限制: 128 MB 提交: 418 解决: 261 题目描述 (1)编写一个函数createlink,用来建立一个动态链表(链表中的节点个数 ...
- C# 链表操作
关于链表操作,在C#当中微软已经提供了一个LinkedList<T>的数据结构,通过这个类提供的一系列方法就能够实现链表操作. 这里我提供一段代码,这是在论坛里面有人提问时给出的代码,它实 ...
- C语言,单链表操作(增删改查)(version 0.1)
这天要面试,提前把链表操作重新写了一遍.备份一下,以备不时之需. 希望有人能看到这篇代码,并指正. // File Name : list.h #include "stdafx.h" ...
- C语言链表操作模板(添加,删除,遍历,排序)
C语言链表操作模板,摘自郝斌的C语言视频教程,简单的修改成了纯C格式.当年照着视频学习的时候记录下来的,在使用的时候直接拿来修改修改修改能节约不少时间的. /********************* ...
- ZT C语言链表操作(新增单向链表的逆序建立)
这个不好懂,不如看 转贴:C语言链表基本操作http://www.cnblogs.com/jeanschen/p/3542668.html ZT 链表逆序http://www.cnblogs.com/ ...
- C#的链表操作[数据结构-线性表]
链式存储结构图解: 上图中,a1,是数据,紧跟着后面的d1是下一个节点的地址值.也就是一个节点的最后存储的是下一个节点的地址值,最后一个节点的存储的下一个地址值是null,代表链表结束. 1,定义链表 ...
- linux 内核的链表操作(好文不得不转)
以下全部来自于http://www.ibm.com/developerworks/cn/linux/kernel/l-chain/index.html 无任何个人意见. 本文详细分析了 2.6.x 内 ...
- 数据结构之 线性表---单链表操作A (删除链表中的指定元素)
数据结构上机测试2-1:单链表操作A Time Limit: 1000MS Memory limit: 4096K 题目描述 输入n个整数,先按照数据输入的顺序建立一个带头结点的单链表,再输入一个数据 ...
随机推荐
- Qt编写地图综合应用7-百度离线地图
一.前言 离线地图的核心其实就是拿到这些瓦片地图文件,并不是离线地图的代码怎么写,其实离线地图的网页代码和在线地图的网页代码几乎一致的,主要就是将对应的依赖的js文件从在线的地址改成本地的地址,然后可 ...
- Vue cli 2.x 3.x及4.x区别
原文链接: 1.Vue cli 2.x 3.x及4.x区别 2.vue-cli2.0/3.0/4.0创建项目的方式差异解读和vue-cli4.0打包命令和环境配置
- [转]Spring+SpringMVC+MyBatis+easyUI整合基础篇(一)项目简述及技术选型介绍
原文链接: Spring+SpringMVC+MyBatis+easyUI整合基础篇(一)项目简述及技术选型介绍
- 使用Maven客户端从Maven中心仓库下载到本地的jar包的默认存储位置及远程仓库
从Maven中心仓库下载到本地的jar包的默认存放在"${user.home}/.m2/repository"中,${user.home}表示当前登录系统的用户目录(如" ...
- 基于高德地图API在Python中实现地图功能的方法
本文介绍在高德开放平台中,申请.获取地图API的Key的方法:同时通过简单的Python代码,调取API信息,对所得Key的可用性加以验证. 首先,我们进入高德开放平台的官方网站.如果大家是第 ...
- R语言系列—R语言简介及安装
同学们,大家好,今天开始开设一个新系列,R语言系列,对生信分析中涉及到的R语言代码及R语言绘图进行详细讲解,感兴趣的同学可以重点关注一下. 什么是R语言? R语言是用于统计分析.绘图的语言和操作环境. ...
- flink基础教程
随着大数据技术在各行各业的广泛应用,要求能对海量数据进行实时处理的需求越来越多,同时数据处理的业务逻辑也越来越复杂,传统的批处理方式和早期的流式处理框架也越来越难以在延迟性.吞吐量.容错能力以及使用便 ...
- linux 亲测wget安装7.3 liferay流程
liferay wget 7.3版本安装1. 下载软件包 sudo wget https://sourceforge.net/projects/lportal/files/Liferay%20Port ...
- 从v-for的key说起
一.v-for中的key是为什么存在呢? 这是vue官网给key的定义,key主要用于vue的虚拟dom算法.新的问题出现了,vue的虚拟dom算法是什么? 二.虚拟domg算法 我们的程序在运行时, ...
- C# 10个常用特性
感谢一傻小冲的分享 https://www.cnblogs.com/liyichong/p/5434309.html 觉得很实用就搬抄一份收藏,上了年纪记忆力不好了. 1) async / await ...