571
社区成员
发帖
与我相关
我的任务
分享type LinkTableNode struct {
data interface{}
next *LinkTableNode
}
type LinkTable struct {
head *LinkTableNode
tail *LinkTableNode
size int
}
func CreateLinkTable() *LinkTable {
head := &LinkTableNode{}
tail := head
return &LinkTable{head, tail, 0}
}
func (lt *LinkTable) GetHead() *LinkTableNode {
return lt.head
}
func (lt *LinkTable) GetTail() *LinkTableNode {
return lt.tail
}
func (lt *LinkTable) GetSize() int {
return lt.size
}
func (lt *LinkTable) InsertFromHead(data interface{}) bool {
node := &LinkTableNode{}
node.data = data
head := lt.GetHead()
tail := lt.GetTail()
if head == nil {
return false
}
if tail == head {
lt.tail = node
}
temp := head.next
head.next = node
node.next = temp
lt.size++
return true
}
func (lt *LinkTable) InsertFromTail(data interface{}) bool {
node := &LinkTableNode{}
node.data = data
tail := lt.GetTail()
tail.next = node
lt.tail = node
node.next = nil
lt.size++
return true
}
func (lt *LinkTable) DeleteNoe(index int) bool {
node := lt.FindNode(index)
if node == lt.GetHead() || node == nil {
return false
}
pre := lt.FindNode(index - 1)
pre.next = node.next
lt.size--
return true
}
func (lt *LinkTable) PrintLinkTable() {
curNode := lt.GetHead()
for curNode != nil {
fmt.Printf("%v ", curNode.data)
curNode = curNode.next
}
fmt.Printf("\n")
}
func (lt *LinkTable) FindNode(index int) *LinkTableNode {
if index < 0 || index > lt.size {
return nil
}
cur := 0
curNode := lt.GetHead()
for curNode != nil {
if cur == index {
return curNode
}
curNode = curNode.next
cur++
}
return curNode
}
func main() {
lt := CreateLinkTable()
lt.InsertFromHead(1)
lt.InsertFromHead(2)
lt.PrintLinkTable()
lt.InsertFromTail(3)
lt.PrintLinkTable()
lt.DeleteNoe(2)
lt.PrintLinkTable()
fmt.Println("Head:", lt.GetHead().data, "Tail:", lt.GetTail().data, "Size:", lt.GetSize())
}
输出如下:



作者:297