golang数据结构和算法之LinkedList链表
差不多自己看懂了,可以自己写测试了。:)
LinkedList.go
package LinkedList //"fmt" type Node struct { data int next *Node } type LinkedList struct { head *Node } func (list *LinkedList) InsertFirst(i int) { data := &Node{data: i} if list.head != nil { data.next = list.head } list.head = data } func (list *LinkedList) InsertLast(i int) { data := &Node{data: i} if list.head == nil { list.head = data return } current := list.head for current.next != nil { current = current.next } current.next = data } func (list *LinkedList) RemoveByValue(i int) bool { if list.head == nil { return false } if list.head.data == i { list.head = list.head.next return true } current := list.head for current.next != nil { if current.next.data == i { current.next = current.next.next return true } current = current.next } return false } func (list *LinkedList) RemoveByIndex(i int) bool { if list.head == nil { return false } if i < 0 { return false } if i == 0 { list.head = list.head.next return true } current := list.head for u := 1; u < i; u++ { if current.next.next == nil { return false } current = current.next } current.next = current.next.next return true } func (list *LinkedList) SearchValue(i int) bool { if list.head == nil { return false } current := list.head for current != nil { if current.data == i { return true } current = current.next } return false } func (list *LinkedList) GetFirst() (int, bool) { if list.head == nil { return 0, false } return list.head.data, true } func (list *LinkedList) GetLast() (int, bool) { if list.head == nil { return 0, false } current := list.head for current.next != nil { current = current.next } return current.data, true } func (list *LinkedList) GetSize() int { count := 0 current := list.head for current != nil { count += 1 current = current.next } return count } func (list *LinkedList) getItems() []int { var items []int current := list.head for current != nil { items = append(items, current.data) current = current.next } return items }
LinkedList_test.go
package LinkedList import ( "fmt" "math/rand" "testing" "time" ) func TestLinkedList(t *testing.T) { random := rand.New(rand.NewSource(time.Now().UnixNano())) headNode := &Node{ data: random.Intn(100), next: nil, } list := &LinkedList{ head: headNode, } fmt.Println(list.getItems()) list.InsertFirst(random.Intn(100)) fmt.Println(list.getItems()) list.InsertLast(random.Intn(100)) fmt.Println(list.getItems()) randNumber := random.Intn(100) list.InsertFirst(randNumber) fmt.Println(list.getItems()) list.InsertLast(random.Intn(100)) fmt.Println(list.getItems()) list.InsertFirst(random.Intn(100)) fmt.Println(list.getItems()) if list.SearchValue(randNumber) == false { t.Fail() } list.RemoveByValue(randNumber) if list.SearchValue(randNumber) == true { t.Fail() } fmt.Println(list.getItems()) fmt.Println(list.RemoveByIndex(1)) fmt.Println(list.getItems()) fmt.Println(list.GetFirst()) fmt.Println(list.GetLast()) fmt.Println(list.GetSize()) }
golang数据结构和算法之LinkedList链表的更多相关文章
- golang数据结构和算法之QueueLinkedList链表队列
队列和堆栈不一样的地方在于进出顺序: 堆栈是后进先出, 队列是先进先出. QueueLinkedList.go package QueueLinkedList type Node struct { d ...
- golang数据结构和算法之StackLinkedList链表堆栈
会了上一个,这个就差不离了. StackLinkedList.go package StackLinkedList type Node struct { data int next *Node } t ...
- 每周一练 之 数据结构与算法(LinkedList)
这是第三周的练习题,原本应该先发第二周的,因为周末的时候,我的母亲大人来看望她的宝贝儿子,哈哈,我得带她看看厦门这座美丽的城市呀. 这两天我抓紧整理下第二周的题目和答案,下面我把之前的也列出来: 1. ...
- golang数据结构和算法之BinarySearch二分查找法
基础语法差不多了, 就需要系统的撸一下数据结构和算法了. 没找到合适的书, 就参考github项目: https://github.com/floyernick/Data-Structures-and ...
- Android版数据结构与算法(三):基于链表的实现LinkedList源码彻底分析
版权声明:本文出自汪磊的博客,未经作者允许禁止转载. LinkedList 是一个双向链表.它可以被当作堆栈.队列或双端队列进行操作.LinkedList相对于ArrayList来说,添加,删除元素效 ...
- java数据结构和算法04(链表)
前面我们看了数组,栈和队列,大概就会这些数据结构有了一些基本的认识,首先回顾一下之前的东西: 在数组中,其实是分为有序数组和无序数组,我简单实现了无序数组,为什么呢?因为有序数组的实现就是将无序数组进 ...
- 数据结构与算法JavaScript描述——链表
1.数组的缺点 数组不总是组织数据的最佳数据结构,原因如下. 在很多编程语言中,数组的长度是固定的,所以当数组已被数据填满时,再要加入新的元素就会非常困难. 在数组中,添加和删除元素也很麻烦,因为需要 ...
- 数据结构与算法(c++)——反转链表
算法概述:要求实现将一条单向链表反转并考虑时间复杂度. 算法分析: 数组法(略): 将列表元素逐个保存进数组,之后再逆向重建列表 点评:实现逻辑最简单,需要额外的内存开销. 移动指针: 通过三个指针逐 ...
- 数据结构和算法之单向链表二:获取倒数第K个节点
我们在做算法的时候或多或少都会遇到这样的问题,那就是我们需要获取某一个数据集的倒数或者正数第几个数据.那么今天我们来看一下这个问题,怎么去获取倒数第K个节点.我们拿到这个问题的时候自然而然会想到我们让 ...
随机推荐
- GO 使用静态链接库编译 生成可执行文件 使用第三方 .a 文件,无源码构造
go build 和 go install 都需要使用源码来进行编译.但是有时候我们只有.a或者.so文件.并不能获取到第三方库的源码,这时我们需要静态链接库编译的技巧: 上图是实验前的文件分布. 使 ...
- WPF datagrid 列按钮使用
原文:WPF中使用DataGrid时操作列按钮问题 <DataGrid x:Name="datagrid" AutoGenerateColumns="Fal ...
- Druid-代码段-4-2
所属文章:池化技术(一)Druid是如何管理数据库连接的? 本代码段对应流程4.1,连接池瘦身: //连接池瘦身 public void shrink(boolean checkTime, boole ...
- 跑健壮性Monkey,出现一次Crash全过程-日志分析-董浩-Dotest
最近带着学生做的某个项目,跑健壮性Monkey,出现一次Crash全过程-日志分析: 准备:搭建adb环境.安装实际测试包:开始: Monkey命令: 1 2 3 4 5 adb shell monk ...
- c++ istringstream用法
istringstream用法,见如下代码 #include <iostream> #include"sstream" using namespace std; int ...
- 算法问题实战策略 SORTGAME
地址 https://algospot.com/judge/problem/read/SORTGAME 解答 常规BFS是会超时的 按照书上的提示 应该是打表(居然还有提倡打表的题目) tle 代码 ...
- 给那些迷茫的人学习JAVA的一些建议?
前语:我用了3年的时间,一步一步走到了现在,半途也有了解过其他的技能,也想过要转其他的言语,可是最终仍是坚持下来走Java这条路,希望我的经历能够帮忙到后来的人,要是觉得对你有帮忙的话,能够注重一下和 ...
- 干货 | 国内互联网公司是如何做微服务实践的?(附PPT下载)
微服务的概念最早由Martin Fowler与James Lewis于2014年共同提出,并随着Netflix最佳实践的发布而为业界所知.如今,在国内有了大量的微服务实践案例,5月18日,网易云联合云 ...
- css 修改placeholder字体颜色字体大小 修改input记住账号密码后的默认背景色
壹 ❀ 引 本来这个阶段的项目页面都是给实习生妹子做的,我只用写写功能接接数据,但这两天妹子要忙翻译,这个工作阶段也快结束了导致有点慌,只能自己把剩余的几个小页面给写了. 那么做页面的过程中,UI也 ...
- linux系列之常用运维命令整理笔录
目录 本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍 ...