/** * Definition for singly-linked list. * type ListNode struct { * Val int * Next *ListNode * } */ funcremoveElements(head *ListNode, val int) *ListNode { for head != nil && head.Val == val { head = head.Next } cur := head
for cur != nil && cur.Next != nil { if cur.Next.Val == val { cur.Next = cur.Next.Next } else { cur = cur.Next } }
func(this *MyLinkedList) Get(index int) int { if this == nil || index < 0 || index >= this.Size { return-1 } cur := this.dummyHead.Next // 设置当前节点为真实头节点 for i := 0; i < index; i++ { // 遍历到索引所在的节点 cur = cur.Next } return cur.Val }
func(this *MyLinkedList) AddAtTail(val int) { newNode := &SingleNode{Val: val} cur := this.dummyHead for cur.Next != nil { cur = cur.Next } cur.Next = newNode this.Size++ }
func(this *MyLinkedList) AddAtIndex(index int, val int) { if this == nil { return }
if index < 0 { index = 0 } if index > this.Size { return } prev := this.dummyHead // 从 dummyHead 开始 for i := 0; i < index; i++ { // 走 index 步,落在前驱 prev = prev.Next }
func(this *MyLinkedList) DeleteAtIndex(index int) { if index < 0 || index >= this.Size { // 如果索引无效则直接返回 return } cur := this.dummyHead // 设置当前节点为虚拟头节点 for i := 0; i < index; i++ { // 遍历到要删除节点的前一个节点 cur = cur.Next } if cur.Next != nil { cur.Next = cur.Next.Next // 当前节点直接指向下下个节点,即删除了下一个节点 } this.Size-- // 注意删除节点后应将链表大小减一 }
/** * Your MyLinkedList object will be instantiated and called as such: * obj := Constructor(); * param_1 := obj.Get(index); * obj.AddAtHead(val); * obj.AddAtTail(val); * obj.AddAtIndex(index,val); * obj.DeleteAtIndex(index); */
/** * Definition for singly-linked list. * type ListNode struct { * Val int * Next *ListNode * } */ funcreverseList(head *ListNode) *ListNode { var pre *ListNode cur := head for cur != nil{ tem := cur.Next cur.Next = pre pre = cur cur = tem } return pre }