LeetCode 203. 移除链表元素

题目链接:LeetCode 203. 移除链表元素
本题是一个经典的单链表删除元素的题目,主要注意的有两点:

  1. 如果删除的元素是不是头元素,则直接 p.Next= p.Next.Next即可
  2. 如果删除的元素是头元素,则需要进行单独的处理
 for head != nil &&  head.Val == val {
       head = head.Next
}
if head == nil {
        return nil
}

完整代码如下:

func removeElements(head *ListNode, val int) *ListNode {

    // 删除头结点
    for head != nil &&  head.Val == val {
       head = head.Next
    }
     if head == nil {
        return nil
    }
    //删除非头节点的情况
    p:=head
    for p.Next != nil && p!=nil {
        if p.Next.Val == val {
            p.Next= p.Next.Next
        }else{
            p = p.Next
        }
    }
    return head

}

当然如果不想单独的处理删除头节点的情况,只需要声明一个虚拟的头节点即可。
完整代码如下:

func removeElements(head *ListNode, val int) *ListNode {

 dummy := &ListNode{}  //虚拟头节点
 dummy.Next=head
 p := dummy

for p.Next!=nil{
    if p.Next.Val==val{
        p.Next=p.Next.Next
    }else{
        p=p.Next
    }       
}
return dummy.Next
}

posted @ 2023-05-05 17:33  小星code  阅读(24)  评论(0)    收藏  举报