1. 程式人生 > >203. 移除連結串列元素

203. 移除連結串列元素

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

示例:

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

public class leetcode203 {
    /*
     * 完全借鑑別人的code 解題思路:
     * 
     * (1) 我們需要先將連結串列的頭結點儲存下來,但是有一種情況需要注意:
     * 
     * 頭節點的值也要被刪除的時候(head.val == val),我們不能簡單的直接將head儲存起來,要把連結串列前面連續的需要刪除的節點
     * 從連結串列移除出去,得到一個頭節點不需要被刪除的新連結串列(head.val != val)。
     * 
     * 也就是第1個迴圈所做的事情。
     * 
     * 這裡需要再做一次非空校驗,例如輸入[1,1,1] ,1; 連結串列全是1,執行過(1)後,新連結串列為空,直接返回null即可。
     * 
     * (2) node 的初始值是頭節點(不等於val),迴圈遍歷連結串列的時候,每次執行的操作是 判斷下一個節點 是否要刪除,即
     * 比較node.next.val 和 val,
     * 
     * 如果相等,將 判斷的節點(node.next)移出連結串列,node.next = node.next.next
     * 
     * 如果不相等,繼續往後遍歷,node = node.next
     * 
     * (3) 最後返回head ---------------------!
     
*/ public ListNode removeElements(ListNode head, int val) { if (head == null) return null; while (head != null && head.val == val) { head = head.next; } if (head == null) return null; ListNode node = head;
while (node.next != null) { if (node.next.val == val) { node.next = node.next.next; } else { node = node.next; } } return head; } }