博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Go语言数据结构和算法-LinkedList(链表)
阅读量:6670 次
发布时间:2019-06-25

本文共 3286 字,大约阅读时间需要 10 分钟。

Go语言数据结构和算法-LinkedList(链表)

Prepend(item)       //  在链表头新增一个元素Append(item)        //  在链表尾追加一个元素InsertAt(i,item)    //  在索引i处插入一个元素RemoveAt(i)         //  删除再索引i处的一个元素Remove(item)        //  删除item元素IndexOf(item)       //  返回item的索引IsEmpty()           //  链表是否为空Size()              //  链表的大小Head()              //  链表的头节点Tail()              //  链表的尾节点String()            //  遍历链表复制代码

节点和链表数据结构

type Node struct {	item interface{}	next *Node}type LinkedList struct {	head *Node	size int  lock sync.RWMutex}复制代码

Prepend(item) 在链表头新增一个元素

func (list *LinkedList) Prepend(item interface{}) {  list.lock.Lock()	defer list.lock.Unlock()	node := &Node{item,nil}	if list.head == nil{		list.head = node	}else{		node.next = list.head		list.head = node	}	list.size += 1}复制代码

Append(item) 在链表尾追加一个元素

func (list *LinkedList) Append(item interface{}) {  list.lock.Lock()	defer list.lock.Unlock()	node := &Node{item, nil}	if list.head == nil {		list.head = node	} else {		cur := list.head		for cur.next != nil {			cur = cur.next		}		cur.next = node	}	list.size += 1}复制代码

InsertAt(i,item) 在索引i处插入一个元素

func (list *LinkedList) InsertAt(i int, item interface{}) error {	list.lock.Lock()	defer list.lock.Unlock()	if i > list.size || i < 0 {		return fmt.Errorf("index error")	}	node := &Node{item, nil}	if i == 0 {		node.next = list.head		list.head = node		list.size += 1		return nil	}	cur := list.head	for cur.next != nil && i != 1 {		i -= 1		cur = cur.next	}	node.next = cur.next	cur.next = node	list.size += 1	return nil}复制代码

RemoveAt(i) 删除再索引i处的一个元素

func (list *LinkedList) RemoveAt(i int) bool {	list.lock.Lock()	defer list.lock.Unlock()	if i < 0 || i >= list.size {		return false	}	if list.head == nil {		return false	}	if i == 0 {		list.head = list.head.next		list.size -= 1		return true	}	cur := list.head	for cur.next != nil && i != 1 {		i -= 1		cur = cur.next	}	cur.next = cur.next.next	list.size -= 1	return true}复制代码

Remove(item) 删除item元素

func (list *LinkedList) Remove(item interface{}) bool {	list.lock.Lock()	defer list.lock.Unlock()	if list.head == nil {		return false	}	if list.head.item == item {		list.head = list.head.next		list.size -= 1		return true	}	cur := list.head	for cur.next != nil {		if cur.next.item == item {			cur.next = cur.next.next			list.size -= 1			return true		}		cur = cur.next	}	return false}复制代码

IndexOf(item) 返回item的索引,如果不存在就返回-1

func (list *LinkedList) IndexOf(item interface{}) int {  list.lock.Lock()	defer list.lock.Unlock()	cur := list.head	index := -1	for cur != nil {		index += 1		if item == cur.item {			return index		}		cur = cur.next	}	return -1}复制代码

IsEmpty() 链表是否为空

func (list *LinkedList) IsEmpty() bool {  list.lock.Lock()	defer list.lock.Unlock()	return list.size == 0}复制代码

Size() 链表的大小

func (list *LinkedList) Size() int {  list.lock.Lock()	defer list.lock.Unlock()	return list.size}复制代码

Head() 链表头节点

func (list *LinkedList) Head() *Node {  list.lock.Lock()	defer list.lock.Unlock()	return list.head}复制代码

Tail() 链表尾节点

func (list *LinkedList) Tail() *Node {  list.lock.Lock()	defer list.lock.Unlock()	cur := list.head	for cur.next != nil {		cur = cur.next	}	return cur}复制代码

String() 遍历真个链表

func (list *LinkedList) String() {  list.lock.Lock()	defer list.lock.Unlock()	cur := list.head	for cur != nil {		fmt.Print(cur.item, "->")		cur = cur.next	}}复制代码

转载地址:http://tslxo.baihongyu.com/

你可能感兴趣的文章
安全是智慧城市建设的重中之重
查看>>
视频会议系统迎来第四次浪潮
查看>>
云计算崛起带动产业革命 智慧城市已悄然来临
查看>>
报告显示:被调研中国企业超85%已从数字转型中获得回报
查看>>
Stimergy公司的边缘平台加热法国公共游泳池
查看>>
安防企业以内养外适应供给侧改革
查看>>
中国移动2016年低端路由器和低端交换机产品结果出炉
查看>>
ABB公司为Hypertec公司蒙特利尔数据中心设计变电站
查看>>
索尼霸图像传感器头把交椅 巨头林立虎视眈眈
查看>>
4G速度的100倍:美国Verizon宣布完成5G无线规范标准制定
查看>>
大数据产业 能否带领内蒙古跨越资源陷阱?
查看>>
联想:模块化智能手机将为物联网行业注入新动力
查看>>
强势标准各占山头 物联网进程受阻
查看>>
惠普的软件定义IT和芯片级安全
查看>>
东方日升拉美光伏电站项目 将进入首期施工
查看>>
零售业已进入第三阶段,大数据助力实现更多价格歧视
查看>>
软件探索性测试 笔记二
查看>>
那个叫“中国移动”的精神病人就要被治愈了
查看>>
物联网领域,华为将主攻四大市场
查看>>
将来也不会被破译的分布式存储系统
查看>>