LeetCode203-移除連結串列元素
阿新 • • 發佈:2020-11-18
非商業,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