手写双向链表
2023-05-24 本文已影响0人
Best博客
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