LeetCode 203. Remove Linked List Elements

題目

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

Example Given: 1 --> 2 --> 6 --> 3 --> 4 --> 5 --> 6, val = 6 Return: 1 --> 2 --> 3 --> 4 --> 5

翻譯

給一個值val,移除連結陣列中所有值為val的節點。

思路

  1. 走訪連結陣列,只要比對目前節點與val相等,就移除目前這點
  2. 移除一個節點,其實是讓前一個節點跳過目前節點直接指向下一個節點
  3. [1,6,3,5] val=3 ,移除[3],因此我們需要知道[3]的前一點是[6]讓[6].next -> [5]

解題

/**
 * Definition for singly-linked list.
 * function ListNode(val) {
 *     this.val = val;
 *     this.next = null;
 * }
 */
/**
 * @param {ListNode} head
 * @param {number} val
 * @return {ListNode}
 */
var removeElements = function(head, val) {
    if(head == null) return null;

    // prev一開始為假節點,例如[2],val=2的時候,就可以讓假節點指向null,完成移除的動作
    var node = new ListNode(0);

    // [1,2,3] val=2,當走到[2]的時候,移除目前[2]這點的方法是讓[1]跳過2直接接[3],變成[1,3],
    // 所以這邊需要先儲存前一個節點prev來備用
    var prev =node;
    node.next = head;

    while(head != null){
        if(head.val != val){
            // 目前節點與val不相等,往下一個
            prev = head;
            head = head.next;
        } else {
            // 目前節點與val相等,跳過目前節點
            prev.next = head.next;
            head = head.next;           
        }

    }

    return node.next;

};

results matching ""

    No results matching ""