237. 删除链表中的节点


删除一个节点,需要获取前一个节点的信息
func deleteNodeByHead(head,node *ListNode)*ListNode {dummyHead :=&ListNode{Val: -1,Next: head,}var pre = dummyHeadfor head!=nil{if head.Val==node.Val {next := node.Nextpre.Next = nexthead = next}else {pre = headhead = head.Next}}return dummyHead.Next}func main() {head :=&ListNode{Val:4}n1 :=&ListNode{Val:5}head.Next = n1n2 :=&ListNode{Val:1}n1.Next = n2n2.Next =&ListNode{Val:9}curr:= deleteNodeByHead(head,n1)// 去掉5个节点for curr != nil{fmt.Println(curr.Val)curr = curr.Next}}
但是这个只有输入参数只有一个当前要删除的节点信息,解决方式有点取巧,就是把下一个节点的值干掉,先把下一个节点的值复制到当前节点
type ListNode struct {Val intNext *ListNode}// 无法获取前置节点 只能把下一个节点干掉 ,然后把一个节点的值复制给当前节点func deleteNode(node *ListNode) {next := node.Next// 当前的下一个节点node.Val = next.Val // 替换值node.Next = next.Next //让当前节点指向的是下一个节点的下一个}func main() {head :=&ListNode{Val:4}n1 :=&ListNode{Val:5}head.Next = n1n2 :=&ListNode{Val:1}n1.Next = n2n2.Next =&ListNode{Val:9}deleteNode(n1)// 去掉5个节点curr :=headfor curr != nil{fmt.Println(curr.Val)curr = curr.Next}}

