package main

import (
"errors"
"fmt"
"strconv"
) type List struct {
Length int
Head *Node
} type Node struct {
NextNode *Node
Value int
} func (list *List) IsEmpty() bool {
return list.Length == 0
} func (list *List) Append(value int) {
list.Length += 1
if list.Head == nil {
list.Head = &Node{Value: value}
return
}
lastNode := list.Head
for lastNode.NextNode != nil {
lastNode = lastNode.NextNode
}
lastNode.NextNode = &Node{Value: value}
} func (list *List) Delete(index int) error {
if index + 1 > list.Length {
return errors.New("index out of range")
}
list.Length -= 1
if index == 0{
list.Head = list.Head.NextNode
return nil
}
indexNode := list.Head
for i := index; i > 1; i-- {
indexNode = indexNode.NextNode
}
if indexNode.NextNode != nil {
indexNode.NextNode = indexNode.NextNode.NextNode
} else {
indexNode.NextNode = nil
}
return nil
} func (list *List) String() string {
var ret string
node := list.Head
for node.NextNode != nil {
ret += strconv.Itoa(node.Value) + ","
node = node.NextNode
}
ret += strconv.Itoa(node.Value)
return ret
} func (list *List) Insert(index, value int) error {
if index + 1 > list.Length {
return errors.New("index out of range")
}
list.Length++
if index == 0{
list.Head = &Node{Value:value, NextNode:list.Head}
return nil
}
indexNode := list.Head
for i := index; i > 1; i-- {
indexNode = indexNode.NextNode
}
tempNode := &Node{Value: value, NextNode: indexNode.NextNode}
indexNode.NextNode = tempNode
return nil
} func main() {
a := List{}
for i := 0; i < 10; i++ {
a.Append(i)
}
fmt.Println(a.String())
if err := a.Insert(9, 99); err != nil{
fmt.Println(err)
}
fmt.Println(a.String())
}

  

golang go语言 实现链表的更多相关文章

  1. C语言之链表

    这两天在复习C语言的知识,为了给下个阶段学习OC做准备,以下的代码的编译运行环境是Xcode5.0版本,写篇博文把昨天复习的C语言有关链表的知识给大家分享一下,以下是小菜自己总结的内容,代码也是按照自 ...

  2. C语言习题 链表建立,插入,删除,输出

    Problem B: C语言习题 链表建立,插入,删除,输出 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 222  Solved: 92 [Subm ...

  3. Mac OS X下环境搭建 Sublime Text 2 环境变量配置 开发工具配置Golang (Go语言)

    Golang (Go语言) Mac OS X下环境搭建 环境变量配置 开发工具配置 Sublime Text 2 一.安装Golang的SDK 在官网http://golang.org/ 直接下载安装 ...

  4. Golang (Go语言) Mac OS X下环境搭建 环境变量配置 开发工具配置 Sublime Text 2 【转】

    一.安装Golang的SDK 在官网 http://golang.org/ 直接下载安装包安装即可.下载pkg格式的最新安装包,直接双击运行,一路按照提示操作即可完成安装. 安装完成后,打开终端,输入 ...

  5. YTU 2430: C语言习题 链表建立,插入,删除,输出

    2430: C语言习题 链表建立,插入,删除,输出 时间限制: 1 Sec  内存限制: 128 MB 提交: 576  解决: 280 题目描述 编写一个函数creatlink,用来建立一个动态链表 ...

  6. 从Golang中open的实现方式看Golang的语言设计

    Golang有很多优点: 开发高效:(C语言写一个hash查找很麻烦,但是go很简单) 运行高效:(Python的hash查找好写,但比Python高效很多) 很少的系统库依赖:(环境依赖少,一般不依 ...

  7. 关于c语言单项链表尾添加

    犹豫了几天,看了很多大牛写的关于c语言链表,感触很多,终于下定决心,把自己对于链表的理解随之附上,可用与否,自行裁夺.由于作者水平有限也是第一次写,不足之处,竭诚希望得到各位大神的批评指正.制作不易, ...

  8. C语言之链表list

    #include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include <string.h& ...

  9. C语言:链表实现的一个实例

    问题:写一个程序输入你一年看过的所有电影以及每部电影的各种信息(简化问题:每部电影只要求输入片名和评价) 链表实现: #include<stdio.h> #include<stdli ...

随机推荐

  1. springsession

    Spring Session 一. HttpSession 回顾 1 什么是 HttpSession 是 JavaWeb 服务端提供的用来建立与客户端会话状态的对象. 二. Session 共享 1 ...

  2. nodejs打包成桌面程序(exe)的进阶之路

    nodejs打包成桌面程序(exe)的进阶之路 node js bat 前端 计划任务 前言:最近的研究,请大佬们细品 第一篇 - 任务计划程序篇 说真的研究到将nodejs打包成可执行的exe文件是 ...

  3. boot磁盘空间大于80警报

    WARNING=80SPACE_USED=`df |grep '^/dev/sda' |tr -s ' ' %|cut -d% -f5|sort -n|tail -n1`[ "$SPACE_ ...

  4. oeasy教您玩转linux010108到底哪个which

    到底哪个which 回忆上次内容 我们上次讲了查找命令位置whereis 我想找到whereis的位置怎么办?

  5. Jira + confluence

    Jira入门教程 敏捷开发管理(一) https://www.jianshu.com/p/145b5c33f7d0 https://www.jianshu.com/p/975385878cde JIR ...

  6. 使用Android的硬件缩放技术优化执行效率

    Unity3D研究院之使用Android的硬件缩放技术优化执行效率 http://www.xuanyusong.com/archives/3205 Android中GLSurfaceView在横竖屏切 ...

  7. Unity2018.4.7导出Xcode工程报错解决方案

    1. unity导出xcode工程有两种模式,一种为模拟器运行的工程,一种为真机运行的工程,这里遇到的错误,都是导出模拟器运行工程时报的错误. 错误1: unity UnityMetalSupport ...

  8. Android studio Debug 源码

    原来有的地方打不了断点 会提示no executable code at line xxx 源码sdk里有,sdkManager下好对应版本,然后使用对应版本的模拟器debug就行了 如果要debug ...

  9. 【HttpRunner v3.x】笔记 ——3. 录制生成测试用例

    在正式手动编写case之前,我们可以先来熟悉下httprunner的录制生成用例功能. 用postman的童鞋都知道,里面有个功能可以将接口转换成代码,可以直接copy过来使用,提升case编写效率. ...

  10. Kubernetes K8S在IPVS代理模式下Service服务的ClusterIP类型访问失败处理

    Kubernetes K8S使用IPVS代理模式,当Service的类型为ClusterIP时,如何处理访问service却不能访问后端pod的情况. 背景现象 Kubernetes K8S使用IPV ...