Contents

[Golang][Leetcode][linkedList]刷題系列-203-刪除元素


203. Remove Linked List Elements


Level : Easy

原題連結 : Click

題目 :

Given the head of a linked list and an integer val, remove all the nodes of the linked list that has Node.val == val, and return the new head.


Example :

Note

Input: head = [1,2,6,3,4,5,6], val = 6

Output: [1,2,3,4,5]


解題思路 :

  • 這題就是較為基礎的Linked-list刪除操作
  • 遍歷,Val等於題目的 given val時,將該node的前一個的Next重新指向該node的下一個node
  • 也就是直接跳過該node的意思,Linked-list就成功刪除掉該node
  • 只有一個要注意的點: 開頭的head node並沒有前一個node,所以我選擇在head前面放一個dummy node的解法

解法 :

  1. 首先我們先宣告一個dummy node,將其Next指向head,就代表他成為該linked-list的"假"頭
  2. 開始遍歷,這邊唯一要注意的一個點就是要分成兩個狀況,
  • 狀況一 : 找到val,則下一輪不往下一個node走(原因是你會檢查並刪掉你的下一個node然後連接上你的下下個node,也就是你下輪要檢查的node在這輪操作已經跟你連上了,故不用移動)
  • 狀況二 : 沒有找到val,則下一輪繼續往下一個node走
  1. 遍歷結束後,回傳dummy node的Next(他才是真正的head)

以下是我自己的解法 - O(n)

Runtime: 0 ms, faster than 100.00% of Go online submissions for Spiral Matrix.


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func removeElements(head *ListNode, val int) *ListNode {
    
    dummyHead := &ListNode{
        Next: head,
    }
     
    node := dummyHead 
    
    for node.Next != nil && node != nil {
        
        if node.Next.Val == val {
            node.Next = node.Next.Next
            continue
        }
        
        node = node.Next        
    }
    
    return dummyHead.Next
}

最後祝福努力認真的各位 “All your dream of are hidden in your daily life” 我們峰頂見!!!