1. 程式人生 > 實用技巧 >LeetCode203-移除連結串列元素

LeetCode203-移除連結串列元素

非商業,LeetCode連結附上:

https://leetcode-cn.com/problems/remove-linked-list-elements/

進入正題。

題目:

刪除連結串列中等於給定值val的所有節點。

示例:

輸入: 1->2->6->3->4->5->6, val = 6
輸出: 1->2->3->4->5

程式碼實現:

/**
 * 定義節點
 */
class ListNode {
    int val;
    ListNode next;

    ListNode(int x) {
        val = x;
    }
}

     /**
     * 移除節點
     * @param head
     * @param val
     * @return
     */
    public static ListNode removeElements(ListNode head, int val) {

        ListNode dummy = new ListNode(0);
        dummy.next = head;

        ListNode prev = dummy;
        ListNode curr = head;

        while (curr != null) {
            if (curr.val == val) {
                prev.next = curr.next;
            } else {
                prev = curr;
            }
            curr = curr.next;
        }

        return dummy.next;
    }

    //時間複雜度:O(N), 空間複雜度:O(1)。

    

分析:

哨兵:

Asentinelis a dummy object that allows us to simplify boundary conditions.
哨兵是用來簡化邊界問題的虛設物件

(哨兵的具體解釋:https://www.zhihu.com/question/27155932)

由於要刪除的節點可能位於頭節點,因此增設一個哨兵節點用來簡化操作。

(哨兵節點廣泛應用於樹和連結串列中,如偽頭、偽尾、標記等,它們是純功能的,通常不儲存任何資料,其主要目的是使連結串列標準化,如使連結串列永不為空、永不無頭、簡化插入和刪除。)

--End