单向链表 golang
package main import "fmt" type Object interface {} //节点
type Node struct {
data Object
next *Node
}
//单向链表
type List struct {
head *Node
tail *Node
size uint64
} //初始化
func(list *List) Init(){
(*list).size = 0 // 此时链表是空的
(*list).head = nil // 没有头
(*list).tail = nil // 没有尾
} //向尾部添加数据
func (list *List) Append(node *Node) bool {
if node == nil {
return false
} (*node).next = nil
// 将新元素放入单链表中
if (*list).size == 0 {
(*list).head = node
} else {
oldTail := (*list).tail
(*oldTail).next = node
} // 调整尾部位置,及链表元素数量
(*list).tail = node // node成为新的尾部
(*list).size++ // 元素数量增加 return true
}
//插入数据
func (list *List) Insert(i uint64,node *Node) bool {
// 空的节点、索引超出范围和空链表都无法做插入操作
if node == nil || i > (*list).size || (*list).size == 0 {
return false
} if i == 0 { // 直接排第一,也就领导小舅子才可以
(*node).next = (*list).head
(*list).head = node
} else {
// 找到前一个元素
preItem := (*list).head
for j := 1 ; uint64(j) < i; j++ { // 数前面i个元素
preItem = (*preItem).next
}
// 原来元素放到新元素后面,新元素放到前一个元素后面
(*node).next = (*preItem).next
(*preItem).next = preItem
} (*list).size++ return true
} //删除元素
func (list *List) Remove(i uint64, node *Node) bool {
if i >= (*list).size {
return false
} if i == 0 { // 删除头部
node = (*list).head
(*list).head = (*node).next
if (*list).size == 1 { // 如果只有一个元素,那尾部也要调整
(*list).tail = nil
}
} else {
preItem := (*list).head
for j := 1; uint64(j) < i; j++ {
preItem = (*preItem).next
} node = (*preItem).next
(*preItem).next = (*node).next if i == ((*list).size - 1) { // 若删除的尾部,尾部指针需要调整
(*list).tail = preItem
}
}
(*list).size--
return true
}
//获取元素
func (list *List) Get(i uint64) *Node {
if i >= (*list).size {
return nil
} item := (*list).head
for j := 0; uint64(j) < i ; j++ { // 从head数i个
item = (*item).next
} return item
}
func main(){
var list= List{}
list.Init()
for i:=1;i<100 ;i++ {
var node=Node{data:i}
list.Append(&node)
}
var node=list.Get(35)
fmt.Printf("当前节点位置:%+q \n,数据:%d \n",node,node.data)
var deleteNode=&Node{}
var result=list.Remove(35,deleteNode)
fmt.Printf("删除是否成功%+q \n",result) var node2=list.Get(35)
fmt.Printf("当前节点位置:%+q \n,数据:%d \n",node2,node2.data)
}
单向链表 golang的更多相关文章
- Reverse Linked List II 单向链表逆序(部分逆序)
0 问题描述 原题点击这里. 将单向链表第m个位置到第n个位置倒序连接.例如, 原链表:1->2->3->4->5, m=2, n =4 新链表:1->4->3-& ...
- 【编程题目】输入一个单向链表,输出该链表中倒数第 k 个结点
第 13 题(链表):题目:输入一个单向链表,输出该链表中倒数第 k 个结点.链表的倒数第 0 个结点为链表的尾指针.链表结点定义如下: struct ListNode {int m_nKey;Lis ...
- 输出单向链表中倒数第k个结点
描述 输入一个单向链表,输出该链表中倒数第k个结点,链表的倒数第0个结点为链表的尾指针. 链表结点定义如下: struct ListNode { int m_nKey; ListNode* ...
- Linus:利用二级指针删除单向链表
Linus大神在slashdot上回答一些编程爱好者的提问,其中一个人问他什么样的代码是他所喜好的,大婶表述了自己一些观点之后,举了一个指针的例子,解释了什么才是core low-level codi ...
- 【转】Linus:利用二级指针删除单向链表
原文作者:陈皓 原文链接:http://coolshell.cn/articles/8990.html 感谢网友full_of_bull投递此文(注:此文最初发表在这个这里,我对原文后半段修改了许多, ...
- C语言实现单向链表及其各种排序(含快排,选择,插入,冒泡)
#include<stdio.h> #include<malloc.h> #define LEN sizeof(struct Student) struct Student / ...
- 数据结构——Java实现单向链表
结点类: /** * @author zhengbinMac * 一个OnelinkNode类的对象只表示链表中的一个结点,通过成员变量next的自引用方式实现线性表中各数据元素的逻辑关系. */ p ...
- 输入一个单向链表,输出该链表中倒数第K个结点
输入一个单向链表,输出该链表中倒数第K个结点,具体实现如下: #include <iostream> using namespace std; struct LinkNode { publ ...
- 单向链表JAVA代码
//单向链表类 publicclassLinkList{ //结点类 publicclassNode{ publicObject data; ...
随机推荐
- 最快的方式清除Chrome浏览器DNS缓存
最快的方式就是直接数据url,然后清除不须要的dns缓存. chrome://net-internals/#dns 一般步骤.要经过下列几项. Chrome - > 扳手 - > 选项 - ...
- Android Jni 调用
Chap1:JNI完全手册... 3 Chap2:JNI-百度百科... 11 Chap 3:javah命令帮助信息... 16 Chap 4:用javah产生一个.h文件... 17 Chap5:j ...
- dns-sd._udp.<domain>. 域名发现 本质和MDNS同
DNS Service Discovery is a way of using standard DNS programming interfaces, servers, and packet for ...
- ZooKeeper Recipes and Solutions
原文地址:http://zookeeper.apache.org/doc/current/recipes.html 参考:https://zookeeper.apache.org/doc/trunk/ ...
- Navicat for Oracle
1.先解压Navicat for Oracle到任意目录 2.将instantclient-basic-nt-12.1.0.2.0解压到1中目录的instantclient_10_2文件夹下(推荐,可 ...
- centos 安装 aria2 webui 实现网页下载
centos aria2 webui 安装aria2 安装 rpmforge源 wget http://repository.it4i.cz/mirrors/repoforge/redhat/el6/ ...
- 紫书 例题 10-18 UVa 11346(连续概率)
就是面积计算,没什么好说的. #include<cstdio> #include<cmath> #define REP(i, a, b) for(int i = (a); i ...
- hiho 1068 重新整理的 Sparse-Table(RMQ)模板
http://hihocoder.com/problemset/problem/1067代码: #include <iostream> #include <cstdio> #i ...
- Unity Launcher类,轻松打开网页,照片,app 等
using UnityEngine; using UnityEngine.WSA; public class test : MonoBehaviour { void Start () { //打开百度 ...
- Unity C# 设计模式(一)单例模式
动机(Motivation): 在软件系统中,经常有这样一些特殊的类,必须保证它们在系统中只存在一个实例,才能确保它们的逻辑正确性.以及良好的效率 意图: 保证一个类仅有一个实例,并提供一 ...