链表反转
/** * Definition for singly-linked list. * type ListNode struct { * Val int * Next *ListNode * } */func reverseList(head *ListNode) *ListNode { cur := head var pre *ListNode for cur != nil { tmp := cur.Next cur.Next = pre // 当前节点指向上一个节点 pre = cur // 进行下一轮 cur = tmp } return pre }
两数相加
func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode { var node *ListNode flag := false for l1 != nil && l2 != nil { val := l1.Val + l2.Val if flag { val++ flag = false } if val > 9 { val = val % 10 flag = true } newNode := new(ListNode) newNode.Val = val if node == nil { node = newNode } else { cur := node pre := node for cur != nil { pre = cur cur = cur.Next } pre.Next = newNode } l1, l2 = l1.Next, l2.Next } for l1 != nil { if flag { l1.Val++ flag = false } if l1.Val > 9 { l1.Val = l1.Val % 10 flag = true } newNode := new(ListNode) newNode.Val = l1.Val cur := node pre := node for cur != nil { pre = cur cur = cur.Next } pre.Next = newNode l1 = l1.Next } for l2 != nil { if flag { l2.Val++ flag = false } if l2.Val > 9 { l2.Val = l2.Val % 10 flag = true } newNode := new(ListNode) newNode.Val = l2.Val cur := node pre := node for cur != nil { pre = cur cur = cur.Next } pre.Next = newNode l2 = l2.Next } if flag { newNode := new(ListNode) newNode.Val = 1 cur := node pre := node for cur != nil { pre = cur cur = cur.Next } pre.Next = newNode } return node}
删除链表的倒数第n个节点
func removeNthFromEnd(head *ListNode, n int) *ListNode { s := make([]*ListNode, 0) h := head for h != nil { s = append(s, h) h = h.Next } node := s[len(s)-n] // 删除的节点是头部的情况 if len(s)-n == 0 { head = head.Next return head } // 删除找到的节点 pre := head cur := head.Next for cur != nil { if cur == node { pre.Next = cur.Next break } else { pre = cur cur = cur.Next } } return head}