微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用golang写的一个链表

近期专门研究了一下golang语言,这个语言还比较新,语法上结合了很多优点,比如动态绑定,多返回值,支持函数对象,如果有C/C++,java,js或python语言基础的朋友应该能很快能迁移到这个新语言上来,goroutine机制帮助我们能更好的写并发程序,总之,golang确实是很有前途的语言,但要具有像java这么丰富的生态链还有很长的路要走。

废话不多说,直接上码

package datastruct

//定义节点
type Node struct{
	data int
	next *Node
}

/***************
* 返回第一个节点
* h 头结点
 ***************/
func getFirst(h *Node) *Node{
	if h.next == nil{
		return nil
	}
	return h.next
}

/***************
* 返回最后一个节点
 */
func getLast(h *Node) *Node{
	if h.next == nil{
		return nil
	}
	var i *Node = h
	for i.next != nil{
		i = i.next
		if i.next == nil{
			return i
		}
	}
	return nil
}

/***************
* 返回长度
 ***************/
func length(h *Node) int{
	var i int = 0
	n := h
	for n.next != nil{
		i++
		n = n.next
	}
	return i
}

/***************
* 插入节点
 ***************/
func insert(h *Node,d *Node,i int) *Node{
	var node *Node = h
	var j int = 1
	for node.next != nil{
		if i == j{
			d.next = node.next
			node.next = d
		}
		node = node.next
		j++
	}
	return h
}
/***************
* 删除节点
 ***************/
func deleteNode(h *Node,i int) *Node{
	var node *Node = h
	var j int = 1
	for node.next != nil{
		if i == j{
			node.next = node.next.next
			break
		}
		node = node.next
		j++
	}
	return h
}
/***************
* 获取节点
 ***************/
func get(h *Node,i int) *Node{
	var node *Node = h
	var j int = 1
	for node.next != nil{
		if i == j{
			return node
		}
		node = node.next
		j++
	}
	return nil
}

原文地址:https://www.jb51.cc/go/188919.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐