package mainimport "fmt"type Node struct { Val int Next *Node}type List struct { HeadNode *Node}func main() { list := NewList() // ["MyLinkedList","addAtHead","addAtTail","addAtIndex","get","deleteAtIndex","get"] // [[],[1],[3],[1,2],[1],[0],[0]] list.AddAtHead(1) list.Show() list.AddAtTail(3) list.Show() list.AddAtIndex(1, 2) list.Show() fmt.Println("No.1:", list.Get(1)) list.DeleteAtIndex(0) list.Show() fmt.Println("No.0:", list.Get(0)) /*list.AddAtHead(1) list.Show() list.AddAtHead(2) list.Show() fmt.Println("No.0:", list.Get(0)) fmt.Println("No.1:", list.Get(1)) fmt.Println("No.4:", list.Get(4)) list.AddAtHead(3) list.Show() list.AddAtTail(4) list.Show() fmt.Println("No.2:", list.Get(2)) list.AddAtTail(5) list.Show() list.AddAtIndex(2, 0) list.Show() fmt.Println("No.3:", list.Get(3)) list.DeleteAtIndex(2) list.Show() fmt.Println("No.3:", list.Get(3))*/}func NewList() *List { return &List{HeadNode: nil}}func (l *List) IsEmpty() bool { if l.HeadNode == nil { return true } else { return false }}func (l *List) GetLen() int { cur := l.HeadNode count := 0 for cur != nil { cur = cur.Next count++ } return count}func (l *List) Get(index int) int { if l.HeadNode == nil || index >= l.GetLen() { return -1 } i := 0 cur := l.HeadNode for { if i == index { return cur.Val } cur = cur.Next i++ } return -1}func (l *List) AddAtHead(val int) { node := &Node{ Val: val, Next: l.HeadNode, } l.HeadNode = node}func (l *List) AddAtTail(val int) { node := &Node{Val: val} if l.IsEmpty() { l.HeadNode = node } else { cur := l.HeadNode for cur.Next != nil { cur = cur.Next } cur.Next = node }}func (l *List) AddAtIndex(index, val int) { if index <= 0 { l.AddAtHead(val) return } if index > l.GetLen() { return } if index == l.GetLen() { l.AddAtTail(val) return } i := 0 node := &Node{Val: val} cur := l.HeadNode for { if i+1 == index { node.Next = cur.Next cur.Next = node break } cur = cur.Next i++ }}func (l *List) DeleteAtIndex(index int) { if index < 0 || l.GetLen() == 0 || index >= l.GetLen() { return } if l.GetLen() == 1 { l.HeadNode = nil return } if index == 0 { l.HeadNode = l.HeadNode.Next return } i := 0 cur := l.HeadNode for { if i+1 == index { cur.Next = cur.Next.Next break } cur = cur.Next i++ }}func (l *List) Show() { if l.HeadNode == nil { return } cur := l.HeadNode fmt.Print(l.GetLen(), " ") for cur != nil { fmt.Print(cur.Val, "-> ") cur = cur.Next } fmt.Println()}