方法:
type LinkedListDoubleMethods interface {
LinkedListInsert(n int) bool
LinkedListDelete(index int) bool
DisplayLinkedList()
}
代码:
package main
import "fmt"
type LinkedListDoubleMethods interface {
LinkedListInsert(n int) bool
LinkedListDelete(index int) bool
DisplayLinkedList()
}
type DLNode struct {
data int
prior *DLNode
next *DLNode
}
func (L *DLNode) LinkedListInsert(n int) bool {
if L == nil {
return false
}
for i := 0; i < n; i++ {
s := &DLNode{data: i}
s.next = L.next //将新节点的next指向当前节点的next 这个时候L和S都指向同一个节点
if L.next != nil {
L.next.prior = s //将L的下一个节点的头节点指向S 这个时候 L的下一个节点和S已经构成一个回路 这里应该注意一个空链表是没有这一步的
}
s.prior = L //s的前继节点指向L
L.next = s //L的next指向s 此时L和S构成一个回路
}
return true
}
func (L *DLNode) LinkedListDelete(index int) bool {
temp := L
for j := 0; j < index; j++ {
temp = temp.next
if temp == nil || temp.next == nil {
return false
}
}
temp.prior.next = temp.next
temp.next = temp.prior.next
return true
}
func (L *DLNode) DisplayLinkedList() {
p := L.next
for p != nil {
fmt.Print(p.data, " ")
p = p.next
}
fmt.Println()
}
func main() {
var LinkedListDouble LinkedListDoubleMethods = &DLNode{}
LinkedListDouble.LinkedListInsert(30)
LinkedListDouble.DisplayLinkedList()
fmt.Println(LinkedListDouble.LinkedListDelete(3))
LinkedListDouble.DisplayLinkedList()
}