1. 程式人生 > >LeetCode筆記——203刪除連結串列中的元素

LeetCode筆記——203刪除連結串列中的元素

題目:

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

示例:

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

思路:我自己想的是判斷當前節點temp的下一個節點temp.next是否等於val,如果相等就將temp.next.next賦給temp.next。若連結串列的第一個節點和最後一個節點等於val的進行處理。但是寫出的程式碼是錯的。。。。而且恆複雜需要考慮幾個特殊情況。於是借鑑了網上大神的程式碼:

程式碼:

在連結串列頭新增一個節點,這樣可以不用特殊處理連結串列頭和連結串列結尾的特殊節點,便於連結串列遍歷和刪除

class Solution {     public ListNode removeElements(ListNode head, int val) {         ListNode root = new ListNode(1);         root.next = head;         // 調於記錄要處理的元素的前驅結點         ListNode prev = root;

        // prev.next表示要處理的結點         while (prev.next != null) {             // 要處理的結點是要刪除的結點             if (prev.next.val == val) {                 // 對結點進行刪除操作                 prev.next = prev.next.next;             }             // 當前處理的節點不需要刪除,prev移動到下一個結點             else {                 prev = prev.next;             }         }

        // 返回新的根結點         return root.next;     } }