用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
}

相关文章

什么是Go的接口? 接口可以说是一种类型,可以粗略的理解为他...
1、Golang指针 在介绍Golang指针隐式间接引用前,先简单说下...
1、概述 1.1 Protocol buffers定义 Protocol buffe...
判断文件是否存在,需要用到"os"包中的两个函数: os.Stat(...
1、编译环境 OS :Loongnix-Server Linux release 8.3 CPU指...
1、概述 Golang是一种强类型语言,虽然在代码中经常看到i:=1...