国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

代碼隨想錄Day3 | 鏈表01-leetcode203、707、206

這篇具有很好參考價值的文章主要介紹了代碼隨想錄Day3 | 鏈表01-leetcode203、707、206。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

203-移除鏈表元素

題目鏈接:移除鏈表元素

思路:鏈表中元素的添加和刪除關(guān)鍵是要保證不斷鏈且指向關(guān)系正確。對于刪除操作,鏈的修改涉及將待刪除元素的前一個元素指向待刪除元素的后一個元素,因此在判斷當前元素是否需要刪除時,要記錄當前元素的前后指針。

1.刪除頭結(jié)點時另作考慮

算法描述:根據(jù)上述描述,刪除操作需要記錄當前結(jié)點的前一個指針,而對于頭結(jié)點而言沒有前一個指針,因此對于將頭結(jié)點單獨考慮。對于后續(xù)結(jié)點,首先記錄前一個結(jié)點再判斷當前結(jié)點是否需要刪除,若刪除則將前一個結(jié)點指向當前結(jié)點的next。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* removeElements(ListNode* head, int val) {
        //刪除頭結(jié)點時另做考慮
        while(head != nullptr && head->val == val){
            ListNode *tmp = head;
            head = head->next;
            delete tmp;
        }
        
        ListNode *prev = head;
        while(prev != nullptr && prev->next != nullptr){
            ListNode *cur = prev->next;
            if(cur->val == val){
                prev->next = prev->next->next;
                delete cur;
            }
            else
                prev = cur;
        }
        return head;
    }
};

易錯:代碼中通過prev來進入循環(huán),若當前結(jié)點需要刪除,刪除后對于下一個需要處理的結(jié)點的前一個結(jié)點prev仍然時當前這個,不需要進行修改。若結(jié)點不需要刪除,才需要將prev向后移。

2.添加一個虛擬頭結(jié)點

算法描述:添加一個虛擬的頭結(jié)點,從而使得若需要刪除頭結(jié)點時不需要另作考慮。運算完成后返回創(chuàng)建的虛擬結(jié)點的next

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* removeElements(ListNode* head, int val) {
        // 添加一個虛擬頭結(jié)點
        ListNode *hnode = new ListNode(0);
        hnode->next = head;

        ListNode *prev = hnode;
        while(prev != nullptr && prev->next != nullptr){
            ListNode *cur = prev->next;
            if(cur->val == val){
                prev->next = prev->next->next;
                delete cur;
            }
            else
                prev = cur;
        }
        head = hnode->next;
        delete hnode;
        return head;
    }
};

注意:在創(chuàng)建虛擬結(jié)點后需要分配內(nèi)存空間(第15行)


707-設(shè)計鏈表

鏈表操作的基礎(chǔ)題,注意實現(xiàn)細節(jié)。不作詳細說明,參考官方題解or代碼隨想錄707.設(shè)計鏈表


206-反轉(zhuǎn)鏈表

題目鏈接:反轉(zhuǎn)鏈表

思路:暴力求解,定義一個新鏈表。但空間開銷大。 --> 查看題解:代碼隨想錄-反轉(zhuǎn)鏈表

算法描述:雙指針法,后指針確??梢园凑赵湵淼捻樞虮闅v下去,前指針負責修改指向關(guān)系。

? ? ? ? --> 三個指針記錄 1)記錄當前要修改的指針cur? 2)記錄指向原鏈表中的next結(jié)點的指針b_next 3)記錄當前指針反轉(zhuǎn)之后指向的結(jié)點pre

? ? ? ? --> 指針開始遍歷,在開始前pre為nullptr。遍歷時,首先用b_next記錄當前指針的next,記錄后,修改當前的cur指向為pre。更新pre和cur,繼續(xù)遍歷鏈表。文章來源地址http://www.zghlxwxcb.cn/news/detail-596213.html

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        ListNode *b_next;
        ListNode *cur = head;
        ListNode *pre = nullptr;
        
        while(cur){
            b_next = cur->next; // 保存原鏈表中當前結(jié)點的下一個結(jié)點
            cur->next = pre; // 翻轉(zhuǎn)

            pre = cur;
            cur = b_next;
        }

        return pre;

    }
};

到了這里,關(guān)于代碼隨想錄Day3 | 鏈表01-leetcode203、707、206的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 代碼隨想錄Day4 | 鏈表02-leetcode24、19、面試題02.07、142

    題目鏈接:兩兩交換鏈表中的節(jié)點 思路: 雙指針p1、p2,分別指向每次需要交換的節(jié)點。交換過程為p2的next指向p1,p1的next指向p2的next, 還需要注意將p1de前一個指針指向交換后的p2以確保不斷鏈 。 1. 空鏈 or 只有頭結(jié)點? - 直接返回head,無需做任何修改 2. 交換需要記錄前驅(qū)

    2024年02月12日
    瀏覽(27)
  • 代碼隨想錄 Day35 動態(tài)規(guī)劃04 01背包問題和完全背包問題 LeetCode T416 分割等和子集

    代碼隨想錄 Day35 動態(tài)規(guī)劃04 01背包問題和完全背包問題 LeetCode T416 分割等和子集

    說到背包問題大家都會想到使用動規(guī)的方式來求解,那么為什么用動規(guī)呢, dp數(shù)組代表什么呢 ? 初始化是什么 , 遍歷方式又是什么 ,這篇文章筆者將詳細講解背包問題的經(jīng)典例題0-1背包問題和完全背包問題的解題方式,希望能幫助到大家 有人一提到背包問題就只會使用動態(tài)規(guī)劃來

    2024年02月06日
    瀏覽(124)
  • 代碼隨想錄day01

    ● 思維不難,主要是考察對代碼的掌控能力 ● 內(nèi)存中的存儲方式:存放在連續(xù)內(nèi)存空間上的相同類型數(shù)據(jù)的集合 ● 數(shù)組可以通過下標索引獲取到下標對應(yīng)的數(shù)據(jù) ● 數(shù)組下標從0開始 ● 因為內(nèi)存空間地址連續(xù),因此刪除或增加元素的時候,難免移動其他元素地址 ● Java中的

    2024年02月13日
    瀏覽(94)
  • 代碼隨想錄二刷day01

    提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 使用左閉右閉區(qū)間的二分查找時, 最后low一定是被查找元素的插入位置,若查找的數(shù)帶小數(shù),low-1, 便是最終結(jié)果 1、左閉右閉 2、左閉右開

    2024年02月12日
    瀏覽(92)
  • 代碼隨想錄算法訓練day4 | 鏈表

    目錄 24. 兩兩交換鏈表節(jié)點 19. 刪除鏈表倒數(shù)第n個節(jié)點 方法一:普通寫法 方法二:雙指針法 面試題:找鏈表相交節(jié)點 142. 判斷環(huán)形鏈表 虛擬頭節(jié)點的本質(zhì)意義在于減少了特殊情況的處理。不用判斷該節(jié)點是否在鏈表的第一位。 定義快慢兩個指針。 fast先走n步,再讓fast和s

    2024年02月04日
    瀏覽(90)
  • 代碼隨想錄 Leetcode142. 環(huán)形鏈表 II

    代碼隨想錄 Leetcode142. 環(huán)形鏈表 II

    ? ? ? ? 雙指針解決百分之99的鏈表題

    2024年01月19日
    瀏覽(24)
  • 代碼隨想錄 day38 第九章 動態(tài)規(guī)劃part01

    ●??理論基礎(chǔ) ●??509.?斐波那契數(shù) ●??70.?爬樓梯 ●??746.?使用最小花費爬樓梯 理論基礎(chǔ) 解決動態(tài)規(guī)劃必須要想清楚的點 dp數(shù)組以及下標的含義 遞推公式 dp數(shù)組如何初始化 遍歷順序 打印數(shù)組 檢查結(jié)果 關(guān)聯(lián) leetcode 509.?斐波那契數(shù) 思路 動規(guī)五部曲 dp數(shù)組以及下標的含義

    2024年04月17日
    瀏覽(30)
  • 【代碼隨想錄 | Leetcode | 第七天】鏈表 | 鏈表相交 | 環(huán)形鏈表 II

    【代碼隨想錄 | Leetcode | 第七天】鏈表 | 鏈表相交 | 環(huán)形鏈表 II

    歡迎來到小K的Leetcode|代碼隨想錄|專題化專欄,今天將為大家?guī)礞湵硐嘟缓铜h(huán)形鏈表 II的分享 ? ?題目鏈接點這里 給你兩個單鏈表的頭節(jié)點 headA 和 headB ,請你找出并返回兩個單鏈表相交的起始節(jié)點。如果兩個鏈表沒有交點,返回 null 。 圖示兩個鏈表在節(jié)點 c1 開始相交:

    2024年02月17日
    瀏覽(46)
  • 【代碼隨想錄 | Leetcode | 第五天】鏈表 | 移除鏈表元素 | 設(shè)計鏈表 | 203-707

    【代碼隨想錄 | Leetcode | 第五天】鏈表 | 移除鏈表元素 | 設(shè)計鏈表 | 203-707

    歡迎來到小K的Leetcode|代碼隨想錄|專題化專欄,今天將為大家?guī)硪瞥湵碓睾驮O(shè)計鏈表的分享 ? ?題目鏈接點這里 給你一個鏈表的頭節(jié)點 head 和一個整數(shù) val ,請你刪除鏈表中所有滿足 Node.val == val 的節(jié)點,并返回 新的頭節(jié)點 。 示例 1: 示例 2: 示例 3: 提示: 列表中

    2024年02月16日
    瀏覽(40)
  • 代碼隨想錄Day20 回溯算法 LeetCode77 組合問題

    代碼隨想錄Day20 回溯算法 LeetCode77 組合問題

    以下內(nèi)容更詳細解釋來自于:代碼隨想錄 (programmercarl.com) 回溯法也叫回溯搜索法,是搜索法的一種,我們之前在二叉樹中也經(jīng)常使用到回溯來解決問題,其實 有遞歸就有回溯 ,有的時候回溯隱藏在遞歸之下,我們不容易發(fā)覺,今天我們來詳細介紹一下什么是回溯,它能解決哪些問題.

    2024年02月08日
    瀏覽(93)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包