package main
import (
"encoding/json"
"fmt"
)
type node struct {
val interface{}
pre *node
next *node
}
type list struct {
size uint32
head *node
tail *node
}
func newList() *list {
return &list{}
}
func (l *list) AddHead(n *node) {
if l.head == nil {
l.head = n
l.tail = n
l.head.pre = nil
l.tail.next = nil
} else {
tmp := l.head
l.head = n
l.head.pre = nil
l.head.next = tmp
tmp.pre = l.head
}
l.size++
}
func (l *list) AddTail(n *node) {
if l.tail == nil {
l.head = n
l.tail = n
l.head.pre = nil
l.tail.next = nil
} else {
tmp := l.tail
l.tail = n
l.tail.next = nil
l.tail.pre = tmp
tmp.next = l.tail
}
l.size++
}
func (l *list) string() string {
aa := []int{}
var tmp *node
for {
if tmp == nil {
tmp = l.head
}
vv := tmp.val
ss := vv.(int)
aa = append(aa, ss)
tmp = tmp.next
if tmp == nil {
break
}
}
bytes, _ := json.Marshal(aa)
return string(bytes)
}
func main() {
l := newList()
for i := 10; i < 20; i++ {
n := &node{
val: i + 1,
}
l.AddHead(n)
}
for i := 0; i < 10; i++ {
n := &node{
val: i + 1,
}
l.AddTail(n)
}
fmt.Println(l.string())
}
GOROOT=/usr/local/go #gosetup
GOPATH=/Users/hugh/go #gosetup
/usr/local/go/bin/go build -o /Users/hugh/Library/Caches/JetBrains/GoLand2023.1/tmp/GoLand/___go_build_banban_test banban/test #gosetup
/Users/hugh/Library/Caches/JetBrains/GoLand2023.1/tmp/GoLand/___go_build_banban_test
[20,19,18,17,16,15,14,13,12,11,1,2,3,4,5,6,7,8,9,10]
Process finished with the exit code 0
手写双向链表
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...