链表 - 移除链表元素

55 阅读1分钟

数组 - 螺旋矩阵2

本题以力扣上的203号题目为例。

image.png

这道题有两种情况

  1. 如果删除的是头节点怎么办?
  2. 如果删除的不是头节点怎么办?

有没有一种方式能够将上述两种情况全部包含?

有的,我们自己建一个虚拟头节点

image.png 通过自建一个虚拟头节点,得到新的链表删除操作都可以按照某一个固定的操作执行了。

image.png

需要注意的是,我们要删除[9]这个节点,此时必须在[1]这个节点上,这个大家想一想就能想清楚,如果我们此时在[9]上,我们如何拿到[9]上一个节点呢?

/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func removeElements(head *ListNode, val int) *ListNode {
  dummy := &ListNode{}
  dummy.Next = head

  node := dummy
  for node != nil && node.Next != nil {
    if node.Next.Val == val{
      node.Next = node.Next.Next
    }else{
      node = node.Next
    }
  }
  return dummy.Next
}