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. Spring的JDBC的使用(配置和CRUD)

    导包: Spring的JDBC模板的使用 一.默认连接池 创建数据库 create database spring4; use spring4; create table account(id int ...

  2. 006、MySQL取当前系统时间

    #取当前时间文本格式 SELECT curdate( ) , now( ); 效果如下图: 不忘初心,如果您认为这篇文章有价值,认同作者的付出,可以微信二维码打赏任意金额给作者(微信号:3824772 ...

  3. 001.Delphi插件之QPlugins,一个最简单的插件

    安装QPlugins里面的Demo,复制粘贴着写了一个最简单的插件,看看好不好用 EXE代码如下: unit Main_Frm; interface uses Winapi.Windows, Wina ...

  4. Python 常用的标准库以及第三方库有哪些?

    作者:史豹链接:https://www.zhihu.com/question/20501628/answer/223340838来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...

  5. JAVA学习笔记-数组的三种初始化方式

      package Study; public class TestArray02 { public static void main(String[] args){//声明 int[] a; int ...

  6. 吴裕雄--天生自然java开发常用类库学习笔记:IdentityHashMap类

    import java.util.IdentityHashMap ; import java.util.HashMap ; import java.util.Set ; import java.uti ...

  7. Java之集合

    前言: 在写程序当中,集合会经常使用,今天听了马老师的课,写一些自己的总结 正文: 集合最重要的就是一个图,一个类,三个知识点,六个接口 说到图就是上面的图,这个图可以帮我们理解这些接口的继承关系 1 ...

  8. .Net 经典案例

    1.捕捉一只小可爱 using System; using System.Collections.Generic; using System.Linq; using System.Text; usin ...

  9. C/C++贪心算法解决TSP问题

    贪心算法解决旅行商问题 TSP问题(Traveling Salesman Problem,旅行商问题),由威廉哈密顿爵士和英国数学家克克曼T.P.Kirkman于19世纪初提出.问题描述如下: 有若干 ...

  10. nodejs 文件路径问题

    fs.stat()  是 获取 本目录下 文件信息 的方法 .如果使用要加上绝对路径.不然会出问题.例: 解决方法