茄子算法每日N題之LeetCode207移除鏈表元素

LeetCode 207.移除鏈表元素

你們好,我是靈魂畫師--茄子。技術水平通常,喜歡畫畫。spa

開始今天的正題。code

刪除鏈表中等於給定值 val 的全部節點。blog

示例:遞歸

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

輸出: 1->2->3->4->5it

題解:io

1.遞歸解法function

思路:class

  1. 遞歸終止條件,當前項爲null;
  2. 讓當前節點的next指向下一個節點;(遞歸這裏)
  3. 若是當前節點的val值與val值相同那麼就返回,當前節點的下一個節點,若是不是就返回當前節點。

圖解

let removeElements = function (head, val) {
    if (head == null) {
        return head
    }
    head.next = removeElements(head.next, val);
    return head.val === val ? head.next : head;
};

2.哨兵解法List

思路:

  1. 設置一個僞頭,讓pre指向僞頭,cur指向head。
  2. 前進pre跟cur。
  3. 若是cur的val與val相同那麼讓pre.next指向cur.next,若是不一樣則前進節點便可。

圖解

let removeElements = function (head, val) {
    let dummyHead = new ListNode(); // 設置哨兵節點
    dummyHead.next = head;
    let pre = dummyHead; // 設置pre
    let cur = head; // 設置cur

    while (cur != null) { // 判斷cur是否爲null
        if (cur.val !== val) { // 值不相同的話,前進pre跟cur
            pre = cur;
            cur = cur.next;
        } else { // 相同,pre.next指向cur.next 3->null
            pre.next = cur.next;
            cur = pre.next;
        }
    }

    return dummyHead.next;
};

以上就是個人思路以及解法了,但願你們喜歡我畫的圖解,我會繼續努力的ヾ(◍°∇°◍)ノ゙。(點個贊把我帶走吧~~)

相關文章
相關標籤/搜索