链表的特点和初始化

链表的特点

用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的)

结点

结点(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 链表操作的更多相关文章

  1. JAVA 链表操作:循环链表

    主要分析示例: 一.循环链表简述 二.单链表循环链表 三.双链表循环链表 一.循环链表简述 循环链表即链表形成了一个循环的结构,尾节点不再指向NULL,而是指向头节点HEAD,此时判定链表的结束是尾节 ...

  2. 单链表操作B 分类: 链表 2015-06-07 12:42 15人阅读 评论(0) 收藏

    数据结构上机测试2-2:单链表操作B TimeLimit: 1000ms Memory limit: 65536K 题目描述 按照数据输入的相反顺序(逆位序)建立一个单链表,并将单链表中重复的元素删除 ...

  3. YTU 2620: B 链表操作

    2620: B 链表操作 时间限制: 1 Sec  内存限制: 128 MB 提交: 418  解决: 261 题目描述 (1)编写一个函数createlink,用来建立一个动态链表(链表中的节点个数 ...

  4. C# 链表操作

    关于链表操作,在C#当中微软已经提供了一个LinkedList<T>的数据结构,通过这个类提供的一系列方法就能够实现链表操作. 这里我提供一段代码,这是在论坛里面有人提问时给出的代码,它实 ...

  5. C语言,单链表操作(增删改查)(version 0.1)

    这天要面试,提前把链表操作重新写了一遍.备份一下,以备不时之需. 希望有人能看到这篇代码,并指正. // File Name : list.h #include "stdafx.h" ...

  6. C语言链表操作模板(添加,删除,遍历,排序)

    C语言链表操作模板,摘自郝斌的C语言视频教程,简单的修改成了纯C格式.当年照着视频学习的时候记录下来的,在使用的时候直接拿来修改修改修改能节约不少时间的. /********************* ...

  7. ZT C语言链表操作(新增单向链表的逆序建立)

    这个不好懂,不如看 转贴:C语言链表基本操作http://www.cnblogs.com/jeanschen/p/3542668.html ZT 链表逆序http://www.cnblogs.com/ ...

  8. C#的链表操作[数据结构-线性表]

    链式存储结构图解: 上图中,a1,是数据,紧跟着后面的d1是下一个节点的地址值.也就是一个节点的最后存储的是下一个节点的地址值,最后一个节点的存储的下一个地址值是null,代表链表结束. 1,定义链表 ...

  9. linux 内核的链表操作(好文不得不转)

    以下全部来自于http://www.ibm.com/developerworks/cn/linux/kernel/l-chain/index.html 无任何个人意见. 本文详细分析了 2.6.x 内 ...

  10. 数据结构之 线性表---单链表操作A (删除链表中的指定元素)

    数据结构上机测试2-1:单链表操作A Time Limit: 1000MS Memory limit: 4096K 题目描述 输入n个整数,先按照数据输入的顺序建立一个带头结点的单链表,再输入一个数据 ...

随机推荐

  1. Qt编写地图综合应用7-百度离线地图

    一.前言 离线地图的核心其实就是拿到这些瓦片地图文件,并不是离线地图的代码怎么写,其实离线地图的网页代码和在线地图的网页代码几乎一致的,主要就是将对应的依赖的js文件从在线的地址改成本地的地址,然后可 ...

  2. 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打包命令和环境配置

  3. [转]Spring+SpringMVC+MyBatis+easyUI整合基础篇(一)项目简述及技术选型介绍

    原文链接: Spring+SpringMVC+MyBatis+easyUI整合基础篇(一)项目简述及技术选型介绍

  4. 使用Maven客户端从Maven中心仓库下载到本地的jar包的默认存储位置及远程仓库

    从Maven中心仓库下载到本地的jar包的默认存放在"${user.home}/.m2/repository"中,${user.home}表示当前登录系统的用户目录(如" ...

  5. 基于高德地图API在Python中实现地图功能的方法

      本文介绍在高德开放平台中,申请.获取地图API的Key的方法:同时通过简单的Python代码,调取API信息,对所得Key的可用性加以验证.   首先,我们进入高德开放平台的官方网站.如果大家是第 ...

  6. R语言系列—R语言简介及安装

    同学们,大家好,今天开始开设一个新系列,R语言系列,对生信分析中涉及到的R语言代码及R语言绘图进行详细讲解,感兴趣的同学可以重点关注一下. 什么是R语言? R语言是用于统计分析.绘图的语言和操作环境. ...

  7. flink基础教程

    随着大数据技术在各行各业的广泛应用,要求能对海量数据进行实时处理的需求越来越多,同时数据处理的业务逻辑也越来越复杂,传统的批处理方式和早期的流式处理框架也越来越难以在延迟性.吞吐量.容错能力以及使用便 ...

  8. linux 亲测wget安装7.3 liferay流程

    liferay wget 7.3版本安装1. 下载软件包 sudo wget https://sourceforge.net/projects/lportal/files/Liferay%20Port ...

  9. 从v-for的key说起

    一.v-for中的key是为什么存在呢? 这是vue官网给key的定义,key主要用于vue的虚拟dom算法.新的问题出现了,vue的虚拟dom算法是什么? 二.虚拟domg算法 我们的程序在运行时, ...

  10. C# 10个常用特性

    感谢一傻小冲的分享 https://www.cnblogs.com/liyichong/p/5434309.html 觉得很实用就搬抄一份收藏,上了年纪记忆力不好了. 1) async / await ...