因为学过c,知道c的牛逼之处,后来学了go语言,看里面有了指针的概念,所以就套用c中指针的用法,写个简单的链表。
package main
import "fmt"
import "os"
// 节点
type Node struct{
data interface{}
prev *Node
next *Node
}
// 链表
type List struct{
size uint64
head *Node
tail *Node
}
// 初始化
func initList()(list *List){
list=new(List)
list.size=0
list.head=nil
list.tail=nil
return
}
// 尾插法
func (list *List) Insert(data interface{}){
node:=&Node{data:data}
if list.size==0 {
list.head=node
list.tail=node
node.prev=nil
node.next=nil
} else {
node.prev=list.tail
node.next=nil
list.tail.next=node
list.tail=node
}
list.size++
}
// 头插法
func (list *List) InsertHead(data interface{}){
node:=&Node{data:data,prev:nil,next:nil}
if list.size==0{
// 无节点
list.head=node
list.tail=node
}else{
// 插入到头部
node.next=list.head
list.head.prev=node
list.head=node
}
list.size++
}
// 遍历
func (list *List) Print(){
if list.size<=0 {
fmt.Println("linklist is null")
os.Exit(3)
}
var p *Node=list.head
for p!=nil {
// %v打印任意类型
fmt.Printf("%v ",p.data)
p=p.next
}
}
func main(){
list:=initList()
list.Insert(23)
list.Insert(45)
list.Insert(89)
list.InsertHead(66)
list.InsertHead("hello world")
list.Print()
}