" 好的,下面是一个简单的Go语言双向链表实现:
```go
package main
import (
"fmt"
)
type Node struct {
Data int
Next *Node
Prev *Node
}
type DoublyLinkedList struct {
Head *Node
Tail *Node
Size int
}
func (dll *DoublyLinkedList) Append(data int) {
newNode := &Node{Data: data}
if dll.Size == 0 {
dll.Head = newNode
dll.Tail = newNode
} else {
dll.Tail.Next = newNode
newNode.Prev = dll.Tail
dll.Tail = newNode
}
dll.Size++
}
func (dll *DoublyLinkedList) Print() {
current := dll.Head
for current != nil {
fmt.Print(current.Data, " ")
current = current.Next
}
fmt.Println()
}
func main() {
dll := &DoublyLinkedList{}
dll.Append(1)
dll.Append(2)
dll.Append(3)
dll.Append(4)
dll.Print() // 输出: 1 2 3 4
}
```
这个实现中,`Node`结构体包含数据和两个指向前一个和后一个节点的指针。`DoublyLinkedList`结构体包含头节点、尾节点和链表长度。
`Append`方法用于在链表尾部添加新节点。如果链表为空,新节点将成为头节点和尾节点。否则,新节点的下一个节点指针指向链表尾节点,前一个节点指针指向当前尾节点。尾节点指针更新为新节点。链表长度加1。
`Print`方法遍历链表并打印每个节点的数据。
`main`函数创建一个双向链表,向其中添加一些数据,然后打印链表。"