剑指 Offer 18. 删除链表的节点
分两种:
- 给了前驱结点的;
- 不给前驱节点,把后继节点的值复制到本节点,然后删除本节点。
//给定头结点 只给要删除值の情况下 删除节点
func deleteNode(head *ListNode, val int) *ListNode {
dummy := &ListNode{Next: head}
pre := dummy
for head != nil {
if head.Val == val {
pre.Next = head.Next
} else {
pre = pre.Next
}
head = head.Next
}
return dummy.Next
}
//不给头节点,只给要删除的点,不给匹配的值
func deleteNode(node *ListNode) {
node.Val = node.Next.Val
node.Next = node.Next.Next
}