Leetcode 203:Remove Linked List Elements
阿新 • • 發佈:2021-02-10
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;
}
}
提交結果
程式碼分析
- 時間複雜度:O(n)
- 空間複雜度:O(1)