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; } }