手敲數(shù)據(jù)結(jié)構(gòu)--刪除鏈表中的節(jié)點

LeetCode 203

刪除鏈表中等于給定值 val 的所有節(jié)點。
示例:
輸入: 1->2->6->3->4->5->6, val = 6
輸出: 1->2->3->4->5

1.不適用虛擬頭結(jié)點

    private class ListNode {

        int val;
        ListNode next;
        ListNode(int x) {
            val = x;
        }
    }

    public ListNode removeElement1(ListNode head,int val) {
        //刪除滿足條件的頭節(jié)點  while表示連續(xù)滿足
        while (head != null && head.val == val) {
            ListNode delNode = head;
            head = head.next;
            delNode.next = null;
        }
        //刪除完滿足條件的節(jié)點為空后  直接返回null
        if (head == null) {
            return null;
        }
        //將當(dāng)前的head節(jié)點當(dāng)前虛擬節(jié)點進(jìn)行遍歷
        ListNode pre = head;
        while (head.next != null) {
            if (head.next.val == val) {
                ListNode delNode = pre.next;
                pre.next = delNode.next;
                delNode.next = null;
            } else {
                pre = pre.next;
            }
        }

        return head;
    }

    //簡化后的方法
    public ListNode removeElement2(ListNode head,int val) {
        //刪除滿足條件的頭節(jié)點  while表示連續(xù)滿足
        while (head != null && head.val == val) {
            head = head.next;
        }
        //刪除完滿足條件的節(jié)點為空后  直接返回null
        if (head == null) {
            return null;
        }
        //將當(dāng)前的head節(jié)點當(dāng)前虛擬節(jié)點進(jìn)行遍歷
        ListNode pre = head;
        while (head.next != null) {
            if (head.next.val == val) {
                pre.next = pre.next.next;
            } else {
                pre = pre.next;
            }
        }

        return head;
    }

2.使用虛擬節(jié)點解決

    // 使用虛擬節(jié)點簡化haed操作
    public ListNode removeElement3(ListNode head,int val) {
        ListNode dummyHead = new ListNode(-1);
        dummyHead.next = head;
        ListNode pre = dummyHead;
        while (pre.next != null) {
            if (pre.next.val == val) {
                pre.next = pre.next.next;
            } else {
                pre = pre.next;
            }
        }
        return dummyHead.next;
    }

3.使用遞歸解決問題

    // 使用遞歸解決問題
    // 將問題分解為 head + haed.next的鏈表
    public ListNode removeElement4(ListNode head, int val) {
        //空鏈表沒得刪 直接返回null
        if (head == null) return null;

        ListNode res = removeElement4(head.next, val);
        //分解為 head + haed.next的鏈表
        //head滿足條件 就返回haed.next的鏈表
        //head不滿足條件  就返回head接上滿足條件的鏈表
        if (head.val == val) {
            return res;
        } else {
            head.next = res;
            return head;
        }
    }

    //簡化操作為
    public ListNode removeElement5(ListNode head, int val) {
        //空鏈表沒得刪 直接返回null
        if (head == null) return null;

        head.next = removeElement4(head.next, val);
        return head.val == val ? head.next : head;
    }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 鏈表刪除[203] Remove Linked List Elements[19] Remove Nth Node...
    野狗子嗷嗷嗷閱讀 6,430評論 4 35
  • 目錄 1、屬性 2、鏈表和數(shù)組的區(qū)別 2.1、數(shù)組概述 2.2、數(shù)組和鏈表優(yōu)缺點 2.3、鏈表和數(shù)組的比較 3、單...
    我哈啊哈啊哈閱讀 2,935評論 1 41
  • 一些概念 數(shù)據(jù)結(jié)構(gòu)就是研究數(shù)據(jù)的邏輯結(jié)構(gòu)和物理結(jié)構(gòu)以及它們之間相互關(guān)系,并對這種結(jié)構(gòu)定義相應(yīng)的運(yùn)算,而且確保經(jīng)過這...
    Winterfell_Z閱讀 6,592評論 0 13
  • (一) 林淇醒過來的時候發(fā)現(xiàn)自己躺在了家里的床上,樓下響起了哀樂。一切都塵埃落定,媽媽永遠(yuǎn)的離開了,這已成為必須要...
    子云醬閱讀 548評論 0 3
  • 回到家關(guān)上門,兩人半躺半靠在沙發(fā)上,小雞忙把背包摘下來,準(zhǔn)備清點戰(zhàn)利品,可是把背包打開一看就傻眼了,除了那個破手電...
    1019d835891a閱讀 183評論 0 0

友情鏈接更多精彩內(nèi)容