go语言实现循环双链表
时间: 2024-03-04 20:30:40 浏览: 21
package main
import "fmt"
type Node struct {
Prev *Node
Next *Node
Value interface{}
}
type List struct {
Head *Node
Tail *Node
Len int
}
func NewList() *List {
l := &List{}
l.Head = &Node{}
l.Tail = &Node{}
l.Head.Next = l.Tail
l.Tail.Prev = l.Head
return l
}
func (l *List) Len() int {
return l.Len
}
func (l *List) PushBack(v interface{}) {
n := &Node{Prev: l.Tail.Prev, Next: l.Tail, Value: v}
n.Prev.Next = n
n.Next.Prev = n
l.Len++
}
func (l *List) PushFront(v interface{}) {
n := &Node{Prev: l.Head, Next: l.Head.Next, Value: v}
n.Prev.Next = n
n.Next.Prev = n
l.Len++
}
func (l *List) Remove(n *Node) {
n.Prev.Next = n.Next
n.Next.Prev = n.Prev
l.Len--
}
func (l *List) Print() {
for n := l.Head.Next; n != l.Tail; n = n.Next {
fmt.Print(n.Value, " ")
}
fmt.Println()
}
func main() {
l := NewList()
l.PushBack(1)
l.PushBack(2)
l.PushBack(3)
l.PushFront(0)
l.Print()
for n := l.Head.Next; n != l.Tail; {
next := n.Next
fmt.Println(n.Value)
l.Remove(n)
n = next
}
fmt.Println(l.Len())
}
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)