1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
| type Node struct { Val int Next *Node Prev *Node }
type MyLinkedList struct { head *Node tail *Node size int }
func Constructor() MyLinkedList { tail := &Node{ Val: 0, Next: nil, Prev: nil, } head := &Node{ Val: 0, Next: nil, Prev: nil, } head.Next = tail tail.Prev = head return MyLinkedList{ head: head, tail: tail, size: 0, } }
func (this *MyLinkedList) Get(index int) int { if index < 0 || index >= this.size { return -1 }
node := this.head if index <= this.size/2 { for i := 0; i <= index; i++ { node = node.Next } } else { node = this.tail for i := 0; i < this.size-index; i++ { node = node.Prev } } return node.Val }
func (this *MyLinkedList) AddAtHead(val int) { this.AddAtIndex(0, val) }
func (this *MyLinkedList) AddAtTail(val int) { this.AddAtIndex(this.size, val) }
func (this *MyLinkedList) AddAtIndex(index int, val int) { if index < 0 || index > this.size { return }
prev := this.head for i := 0; i < index; i++ { prev = prev.Next }
node := &Node{ Val: val, Next: nil, Prev: nil, } node.Next = prev.Next prev.Next.Prev = node node.Prev = prev prev.Next = node this.size++ }
func (this *MyLinkedList) DeleteAtIndex(index int) { if index < 0 || index >= this.size { return }
prev := this.head for i := 0; i < index; i++ { prev = prev.Next } prev.Next.Next.Prev = prev prev.Next = prev.Next.Next this.size-- }
|