func(this *MyLinkedList) Get(index int) int { if index < 0 || index >= this.size || this == nil { return-1 } p := this.newHead.Next for i := 0; i < index; i++ { p = p.Next } return p.Val }
func(this *MyLinkedList) AddAtTail(val int) { newNode := &LinkList{ Val: val, Next: nil, } p := this.newHead for p.Next != nil { p = p.Next } p.Next = newNode this.size++ }
func(this *MyLinkedList) AddAtIndex(index int, val int) { if index < 0 { index = 0 } elseif index > this.size { return } newNode := &LinkList{ Val: val, Next: nil, } p := this.newHead for i := 0; i < index; i++ { p = p.Next } newNode.Next = p.Next p.Next = newNode this.size++ }
func(this *MyLinkedList) DeleteAtIndex(index int) { if index < 0 || index >= this.size { return } p := this.newHead for i := 0; i < index; i++ { p = p.Next } if p.Next != nil { p.Next = p.Next.Next } this.size-- }
funcreverseList(head *ListNode) *ListNode { if head == nil { return head } p := head.Next head.Next = nil for p != nil { head = addAtHead(head, p.Val) p = p.Next } return head }
小结
leetcode上的链表的题都是无头链表,所谓的 head 被叫做 虚拟头。我感觉还是叫做无头链表好一些,新建一个头先链接无头链表