使用虚拟头节点可以保证删除操作的一致性,不必单独为头节点删除做额外处理
func deleteNode(head *ListNode, val int) *ListNode {
dumpHead := &ListNode{Next:head}
prev := dumpHead
for prev != nil && prev.Next != nil {
// 当发现下一节点需要删除
// Next 直接跳过下一节点
if prev.Next.Val == val {
prev.Next = prev.Next.Next
}
prev = prev.Next
}
return dumpHead.Next
}