剑指 Offer 18. 删除链表的节点

分两种:

  • 给了前驱结点的;
  • 不给前驱节点,把后继节点的值复制到本节点,然后删除本节点。
  1. //给定头结点 只给要删除值の情况下 删除节点
  2. func deleteNode(head *ListNode, val int) *ListNode {
  3. dummy := &ListNode{Next: head}
  4. pre := dummy
  5. for head != nil {
  6. if head.Val == val {
  7. pre.Next = head.Next
  8. } else {
  9. pre = pre.Next
  10. }
  11. head = head.Next
  12. }
  13. return dummy.Next
  14. }
//不给头节点,只给要删除的点,不给匹配的值
func deleteNode(node *ListNode) {
    node.Val = node.Next.Val
    node.Next = node.Next.Next
}