1. 程式人生 > 其它 >Leetcode 203:Remove Linked List Elements

Leetcode 203:Remove Linked List Elements

技術標籤:連結串列leetcode資料結構演算法單鏈表

Leetcode 203:Remove Linked List Elements

Remove all elements from a linked list of integers that have value val.

要點:

  • 考慮如果 head.val == val 要怎麼辦?

[法1] 虛擬頭結點

思路

題目非常簡單,就是遍歷連結串列,然後判斷 node.val 是否等於 val,如果相等,就刪除掉 node,如果不等,就繼續遍歷。

唯一需要注意的點是如果 head.val == val 就成立了,那麼就需要更換頭結點了。

我們當然可以單獨處理這種情況,但是如果 head.val == val 成立後,我們更換了頭結點,而新的頭結點也滿足這個條件的話,就又需要處理了。所以會比較繁瑣。

比較好的思路是建立一個虛擬的頭結點 dummyHead,就可以相容所有的情況了,不需要對 head 做特殊處理。

程式碼
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution { public ListNode removeElements(ListNode head, int val) { if(head == null){ return head; } //虛擬頭結點 ListNode dummyHead = new ListNode(0,head); //前一個結點 ListNode pre = dummyHead; //當前結點 ListNode cur = head;
while(cur != null){ //先儲存下一個節點 ListNode next = cur.next; //不相等,繼續往後 if(cur.val != val){ pre = cur; cur = next; }else{ //相等,刪除當前元素 pre.next = next; cur = next; } } return dummyHead.next; } }
提交結果
image-20210206103752233
程式碼分析
  • 時間複雜度:O(n)
  • 空間複雜度:O(1)