package main

 import "fmt"

 type Object interface{}

 type Node struct {
data Object
next *Node
} type List struct {
headNode *Node
} func NewNode(data Object, next *Node) *Node {
return &Node{data, next}
} func (list *List) IsEmpty() bool {
return list.headNode == nil
} func (list *List) Add(node *Node) *List {
headNode := list.headNode
if headNode.next != nil {
node.next = headNode.next
}
headNode.next = node
return list
} func (list *List) Append(node *Node) *List {
if list.IsEmpty() {
list.headNode = node
return list
}
curNode := list.headNode
for curNode.next != nil {
curNode = curNode.next
}
curNode.next = node
return list
} func (list *List) Insert(index int, data Object) {
if (index >= && index < list.Length()) {
count :=
if !list.IsEmpty() {
curNode := list.headNode
for curNode != nil && count < index {
count++
curNode = curNode.next
}
node := NewNode(data, curNode.next)
curNode.next = node
}
}
} func (list *List) Remove(index int) {
if (index >= && index < list.Length()) {
count :=
if !list.IsEmpty() {
curNode := list.headNode
for curNode != nil && count < index- {
count++
curNode = curNode.next
}
curNode.next = curNode.next.next
}
}
} func PrintList(list *List) {
cur := list.headNode
for cur != nil {
fmt.Println(cur.data)
cur = cur.next
}
} func (list *List) Length() int {
var length int
curNode := list.headNode
for curNode != nil {
length++
curNode = curNode.next
}
return length
} func ReverseList(head *Node) *Node {
cur := head
var pre *Node = nil
for cur != nil {
pre, cur, cur.next = cur, cur.next, pre
}
return cur
} func main(){
fmt.Println("NewNode======================")
node := NewNode(, nil)
fmt.Println(node.data)
list := &List{node}
PrintList(list)
node2 := NewNode("a", nil)
list.Append(node2)
fmt.Println("Add======================")
PrintList(list)
node1 := NewNode(, nil)
list.Add(node1)
fmt.Println("Length======================")
PrintList(list)
fmt.Println(list.Length())
fmt.Println("Insert======================")
list.Insert(, )
PrintList(list)
fmt.Println("Remove======================")
list.Remove()
PrintList(list)
fmt.Println("ReverseList======================")
ReverseList(node)
PrintList(list)
}

golang实现单链表的更多相关文章

  1. golang构造单链表

    原文地址:http://www.niu12.com/article/47package main import "fmt" type ListNode struct { Value ...

  2. golang数据结构之单链表

    实现单链表的增删查改. 目录如下: singleLink.go package link import ( "fmt" ) //HeroNode 链表节点 type HeroNod ...

  3. 数据结构之单链表(golang版)

    线性表之单链表 package main //线性表中的链式存储结构 //第一个节点为头节点,并不真实保存数据,头节点基本代表了整个链表 import ( "fmt" ) type ...

  4. 时间复杂度分别为 O(n)和 O(1)的删除单链表结点的方法

    有一个单链表,提供了头指针和一个结点指针,设计一个函数,在 O(1)时间内删除该结点指针指向的结点. 众所周知,链表无法随机存储,只能从头到尾去遍历整个链表,遇到目标节点之后删除之,这是最常规的思路和 ...

  5. 单链表的C++实现(采用模板类)

    采用模板类实现的好处是,不用拘泥于特定的数据类型.就像活字印刷术,制定好模板,就可以批量印刷,比手抄要强多少倍! 此处不具体介绍泛型编程,还是着重叙述链表的定义和相关操作.  链表结构定义 定义单链表 ...

  6. Java实现单链表的各种操作

    Java实现单链表的各种操作 主要内容:1.单链表的基本操作 2.删除重复数据 3.找到倒数第k个元素   4.实现链表的反转   5.从尾到头输出链表 6.找到中间节点 7.检测链表是否有环 8.在 ...

  7. [LeetCode] Linked List Cycle II 单链表中的环之二

    Given a linked list, return the node where the cycle begins. If there is no cycle, return null. Foll ...

  8. c++单链表基本功能

    head_LinkNode.h /*单链表类的头文件*/#include<assert.h>#include"compare.h"typedef int status; ...

  9. 单链表、循环链表的JS实现

    数据结构系列前言: 数据结构作为程序员的基本知识,需要我们每个人牢牢掌握.近期我也展开了对数据结构的二次学习,来弥补当年挖的坑......   当时上课的时候也就是跟着听课,没有亲自实现任何一种数据结 ...

随机推荐

  1. PHP截取指定字符前的字符串

    $str = 'A|B||C|D'; echo substr($str,0,strpos($str, '||')); 输出:A|B

  2. Mongoose使用

    文章来自 Mongoose基础入门 Mongoose的API Mongoose模式扩展 指南之查询 指南之验证 mongoose方法很多,很乱,版本不一样,有些方法可能都过时了,所以整理了很久 连接数 ...

  3. 提升Windows系统舒适度软件

    1.Geek Uninstaller 卸载软件 2.PotPlayer 无广告播放器

  4. CAN网络上新增加的设备与网络上已有设备MAC地址冲突的软件解决方案

    已知 1号的CAN节点的地址是0x1f 2号的CAN 节点的地址是0x1f 要达到的要求是 假设 网络上 CAN1 节点已经工作了,我现在需要在网络上接入CAN2节点. 那么CAN2节点首次上电的时候 ...

  5. 基于 Annotation 的装配(注解)

    注解:就是一个类,使用@注解名称 开发中:使用注解 取代 xml配置文件. 1. @Component取代<bean class=""> @Component(&quo ...

  6. uniapp 小程序实现自定义底部导航栏(tarbar)

    在小程序开发中,默认底部导航栏很难满足实际需求,好在官方给出了自定义形式,效果如下: 话不多说,直接上代码 1.组件 custom-tarbar.vue文件 <template> < ...

  7. vim快速跳转到某一行

    在vim命令行模式下输入 : n(行数)  |

  8. exec()函数问题

    源代码: 在网上也搜索了答案 比较详细的答案是: <?php exec("lsof -i:80",$out,$status); 结果: var_dump($out); arr ...

  9. AFNetworking实现表单(multipart)形式上传图片

    最近遇到个问题,就是上传图片到服务器,后台说用表单形式... 由于没弄过这种上传,所以搜了大堆资料,但也没解决问题. 最后通过请教一位大神才得以解决这个简单的问题... 现在将此方法做个笔记... & ...

  10. VUE- 异步等待方法嵌套

    VUE- 异步等待方法嵌套 vue在一个方法执行完后执行另一个方法用Promise来实现.Promise是ES6的新特性,用于处理异步操作逻辑,用过给Promise添加then和catch函数,处理成 ...