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

【代碼隨想錄 | Leetcode | 第六天】鏈表 | 反轉(zhuǎn)鏈表 | 兩兩交換鏈表中的節(jié)點(diǎn) | 刪除鏈表的倒數(shù)第 N 個(gè)結(jié)點(diǎn)

這篇具有很好參考價(jià)值的文章主要介紹了【代碼隨想錄 | Leetcode | 第六天】鏈表 | 反轉(zhuǎn)鏈表 | 兩兩交換鏈表中的節(jié)點(diǎn) | 刪除鏈表的倒數(shù)第 N 個(gè)結(jié)點(diǎn)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

前言

歡迎來到小K的Leetcode|代碼隨想錄|專題化專欄,今天將為大家?guī)矸崔D(zhuǎn)鏈表、兩兩交換鏈表中的節(jié)點(diǎn)和刪除鏈表的倒數(shù)第N個(gè)節(jié)點(diǎn)的分享?


206. 反轉(zhuǎn)鏈表

?題目鏈接點(diǎn)這里
給你單鏈表的頭節(jié)點(diǎn) head ,請(qǐng)你反轉(zhuǎn)鏈表,并返回反轉(zhuǎn)后的鏈表。

示例 1:
【代碼隨想錄 | Leetcode | 第六天】鏈表 | 反轉(zhuǎn)鏈表 | 兩兩交換鏈表中的節(jié)點(diǎn) | 刪除鏈表的倒數(shù)第 N 個(gè)結(jié)點(diǎn),# Leetcode | 代碼隨想錄 | 專題化,leetcode,鏈表,算法

輸入:head = [1,2,3,4,5]
輸出:[5,4,3,2,1]

示例 2:
【代碼隨想錄 | Leetcode | 第六天】鏈表 | 反轉(zhuǎn)鏈表 | 兩兩交換鏈表中的節(jié)點(diǎn) | 刪除鏈表的倒數(shù)第 N 個(gè)結(jié)點(diǎn),# Leetcode | 代碼隨想錄 | 專題化,leetcode,鏈表,算法

輸入:head = [1,2]
輸出:[2,1]

示例 3:

輸入:head = []
輸出:[]

提示:

鏈表中節(jié)點(diǎn)的數(shù)目范圍是 [0, 5000]
-5000 <= Node.val <= 5000

方法一:雙指針法,我們先定義一個(gè)cur節(jié)點(diǎn)指向頭結(jié)點(diǎn),然后定義一個(gè)pre節(jié)點(diǎn)指向nullptr,然后定義一個(gè)臨時(shí)節(jié)點(diǎn)temp保存cur->next,因?yàn)槲覀円淖?code>cur->next的指向,將cur->next指向pre,循環(huán)執(zhí)行并且移動(dòng)precur節(jié)點(diǎn),當(dāng)cur指向空,循環(huán)結(jié)束,我們返回pre就OK了
如下圖,第一和第二幅圖分別展示了第一和第二步pre,cur,temp的變化以及節(jié)點(diǎn)的反轉(zhuǎn)情況,第三幅圖則代表最后一步的情況
【代碼隨想錄 | Leetcode | 第六天】鏈表 | 反轉(zhuǎn)鏈表 | 兩兩交換鏈表中的節(jié)點(diǎn) | 刪除鏈表的倒數(shù)第 N 個(gè)結(jié)點(diǎn),# Leetcode | 代碼隨想錄 | 專題化,leetcode,鏈表,算法

class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        ListNode* temp;
        ListNode* pre=nullptr;
        ListNode* cur=head;
        while(cur)
        {
            temp=cur->next;
            cur->next=pre;
            pre=cur;
            cur=temp;
        }
        delete temp,cur;
        temp=nullptr,cur=nullptr;
        return pre;
    }
};

【代碼隨想錄 | Leetcode | 第六天】鏈表 | 反轉(zhuǎn)鏈表 | 兩兩交換鏈表中的節(jié)點(diǎn) | 刪除鏈表的倒數(shù)第 N 個(gè)結(jié)點(diǎn),# Leetcode | 代碼隨想錄 | 專題化,leetcode,鏈表,算法
方法二:遞歸寫法,和雙指針寫法思路一樣,就是代碼看起來不是那么好理解,不過理解了雙指針,問題就不是很大

class Solution {
public:
    ListNode* reverse(ListNode* pre,ListNode* cur) 
    {
        if(cur==nullptr) return pre;
        ListNode* temp=cur->next;
        cur->next=pre;
        return reverse(cur,temp);
    }
    ListNode* reverseList(ListNode* head) 
    {
        return reverse(nullptr,head);
    }
};

【代碼隨想錄 | Leetcode | 第六天】鏈表 | 反轉(zhuǎn)鏈表 | 兩兩交換鏈表中的節(jié)點(diǎn) | 刪除鏈表的倒數(shù)第 N 個(gè)結(jié)點(diǎn),# Leetcode | 代碼隨想錄 | 專題化,leetcode,鏈表,算法

24. 兩兩交換鏈表中的節(jié)點(diǎn)

?題目鏈接點(diǎn)這里
給你一個(gè)鏈表,兩兩交換其中相鄰的節(jié)點(diǎn),并返回交換后鏈表的頭節(jié)點(diǎn)。你必須在不修改節(jié)點(diǎn)內(nèi)部的值的情況下完成本題(即,只能進(jìn)行節(jié)點(diǎn)交換)。

示例 1:
【代碼隨想錄 | Leetcode | 第六天】鏈表 | 反轉(zhuǎn)鏈表 | 兩兩交換鏈表中的節(jié)點(diǎn) | 刪除鏈表的倒數(shù)第 N 個(gè)結(jié)點(diǎn),# Leetcode | 代碼隨想錄 | 專題化,leetcode,鏈表,算法

輸入:head = [1,2,3,4]
輸出:[2,1,4,3]

示例 2:

輸入:head = []
輸出:[]

示例 3:

輸入:head = [1]
輸出:[1]

提示:

鏈表中節(jié)點(diǎn)的數(shù)目在范圍 [0, 100] 內(nèi)
0 <= Node.val <= 100

思路:我們通過圖解來講解我們的思路,注意我們這里引入虛擬頭結(jié)點(diǎn),避免要單獨(dú)處理頭結(jié)點(diǎn)的情況
【代碼隨想錄 | Leetcode | 第六天】鏈表 | 反轉(zhuǎn)鏈表 | 兩兩交換鏈表中的節(jié)點(diǎn) | 刪除鏈表的倒數(shù)第 N 個(gè)結(jié)點(diǎn),# Leetcode | 代碼隨想錄 | 專題化,leetcode,鏈表,算法

class Solution {
public:
    ListNode* swapPairs(ListNode* head) 
    {
        ListNode* virtualHead=new ListNode(0,head);
        ListNode* cur=virtualHead;
        while(cur->next!=nullptr&&cur->next->next!=nullptr)
        {
            ListNode* temp=cur->next;
            ListNode* temp1=cur->next->next->next;

            cur->next=cur->next->next;
            cur->next->next=temp;
            temp->next=temp1;
            
            cur=cur->next->next;
        }
        return virtualHead->next;
    }
};

【代碼隨想錄 | Leetcode | 第六天】鏈表 | 反轉(zhuǎn)鏈表 | 兩兩交換鏈表中的節(jié)點(diǎn) | 刪除鏈表的倒數(shù)第 N 個(gè)結(jié)點(diǎn),# Leetcode | 代碼隨想錄 | 專題化,leetcode,鏈表,算法

19. 刪除鏈表的倒數(shù)第 N 個(gè)結(jié)點(diǎn)

?題目鏈接點(diǎn)這里
給你一個(gè)鏈表,刪除鏈表的倒數(shù)第 n 個(gè)結(jié)點(diǎn),并且返回鏈表的頭結(jié)點(diǎn)。

示例 1:
【代碼隨想錄 | Leetcode | 第六天】鏈表 | 反轉(zhuǎn)鏈表 | 兩兩交換鏈表中的節(jié)點(diǎn) | 刪除鏈表的倒數(shù)第 N 個(gè)結(jié)點(diǎn),# Leetcode | 代碼隨想錄 | 專題化,leetcode,鏈表,算法

輸入:head = [1,2,3,4,5], n = 2
輸出:[1,2,3,5]

示例 2:

輸入:head = [1], n = 1
輸出:[]

示例 3:

輸入:head = [1,2], n = 1
輸出:[1]

提示:

鏈表中結(jié)點(diǎn)的數(shù)目為 sz
1 <= sz <= 30
0 <= Node.val <= 100
1 <= n <= sz

思路:使用雙指針法,定義一個(gè)快指針和一個(gè)慢指針,讓快指針移動(dòng)n步,然后讓快指針和慢指針一起移動(dòng),當(dāng)快指針指向空時(shí),慢指針的指向就是要?jiǎng)h除的節(jié)點(diǎn),這里是讓快指針移動(dòng)了n+1步,這樣最后慢指針就指向了要?jiǎng)h除節(jié)點(diǎn)的前一個(gè),更方便刪除

class Solution {
public:
    ListNode* removeNthFromEnd(ListNode* head, int n) 
    {
        ListNode* virtualHead=new ListNode(0,head);
        ListNode* slow,*fast;
        slow=fast=virtualHead;
        n++;
        while(n--&&fast!=nullptr) fast=fast->next;
        while(fast)
        {
            fast=fast->next;
            slow=slow->next;
        }
        slow->next=slow->next->next;
        return virtualHead->next;
    }
};

【代碼隨想錄 | Leetcode | 第六天】鏈表 | 反轉(zhuǎn)鏈表 | 兩兩交換鏈表中的節(jié)點(diǎn) | 刪除鏈表的倒數(shù)第 N 個(gè)結(jié)點(diǎn),# Leetcode | 代碼隨想錄 | 專題化,leetcode,鏈表,算法

總結(jié)

今日為大家?guī)砹随湵淼姆崔D(zhuǎn),節(jié)點(diǎn)的交換,節(jié)點(diǎn)的刪除這三個(gè)類型題目的分享,發(fā)現(xiàn)雙指針是用的真多!好用~愛用?文章來源地址http://www.zghlxwxcb.cn/news/detail-599125.html

到了這里,關(guān)于【代碼隨想錄 | Leetcode | 第六天】鏈表 | 反轉(zhuǎn)鏈表 | 兩兩交換鏈表中的節(jié)點(diǎn) | 刪除鏈表的倒數(shù)第 N 個(gè)結(jié)點(diǎn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

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

    題目鏈接:移除鏈表元素 思路: 鏈表中元素的添加和刪除關(guān)鍵是要 保證不斷鏈且指向關(guān)系正確 。對(duì)于刪除操作,鏈的修改涉及將待刪除元素的前一個(gè)元素指向待刪除元素的后一個(gè)元素,因此在判斷當(dāng)前元素是否需要?jiǎng)h除時(shí),要記錄當(dāng)前元素的前后指針。 1.刪除頭結(jié)點(diǎn)時(shí)另作

    2024年02月16日
    瀏覽(92)
  • 代碼隨想錄第三天|鏈表理論基礎(chǔ),LeetCode203.移除鏈表元素, LeetCode707.設(shè)計(jì)鏈表,LeetCode 206.反轉(zhuǎn)鏈表

    代碼隨想錄第三天|鏈表理論基礎(chǔ),LeetCode203.移除鏈表元素, LeetCode707.設(shè)計(jì)鏈表,LeetCode 206.反轉(zhuǎn)鏈表

    鏈表: 鏈表是一種通過指針串聯(lián)在一起的線性結(jié)構(gòu),每一個(gè)節(jié)點(diǎn)由兩部分組成,一個(gè)是數(shù)據(jù)域一個(gè)是指針域(存放指向下一個(gè)節(jié)點(diǎn)的指針),最后一個(gè)節(jié)點(diǎn)的指針域指向null(空指針的意思)。 鏈表的入口節(jié)點(diǎn)稱為鏈表的頭結(jié)點(diǎn)也就是head。 鏈表類型: 1.單鏈表 單鏈表中的指

    2024年02月11日
    瀏覽(27)
  • 代碼隨想錄-刷題第五十六天

    先介紹單調(diào)棧類型的題目, 通常是一維數(shù)組,要尋找任一個(gè)元素的右邊或者左邊第一個(gè)比自己大或者小的元素的位置,此時(shí)就要想到可以用單調(diào)棧 。時(shí)間復(fù)雜度為O(n)。 單調(diào)棧的本質(zhì)是空間換時(shí)間,因?yàn)樵诒闅v的過程中需要用一個(gè)棧來記錄右邊第一個(gè)比當(dāng)前元素高的元素,優(yōu)

    2024年01月17日
    瀏覽(24)
  • 代碼隨想錄Day4 | 鏈表02-leetcode24、19、面試題02.07、142

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

    2024年02月12日
    瀏覽(27)
  • 代碼隨想錄第五十六天——兩個(gè)字符串的刪除操作,編輯距離

    題目鏈接:兩個(gè)字符串的刪除操作 兩個(gè)字符串可以相互刪除 版本一: 確定dp數(shù)組及下標(biāo)的含義 dp[i][j] :以i-1為結(jié)尾的字符串word1,和以j-1為結(jié)尾的字符串word2,想要達(dá)到相等,所需要?jiǎng)h除元素的最少次數(shù) 確定遞推公式 (1)當(dāng)word1[i - 1] 與 word2[j - 1]相同: (2)當(dāng)word1[i - 1] 與

    2024年02月02日
    瀏覽(27)
  • 代碼隨想錄第四天|LeetCode24. 兩兩交換鏈表中的節(jié)點(diǎn),LeetCode19.刪除鏈表的倒數(shù)第N個(gè)節(jié)點(diǎn),LeetCode面試題 02.07. 鏈表相交,LeetCode142.環(huán)形鏈表II

    代碼隨想錄第四天|LeetCode24. 兩兩交換鏈表中的節(jié)點(diǎn),LeetCode19.刪除鏈表的倒數(shù)第N個(gè)節(jié)點(diǎn),LeetCode面試題 02.07. 鏈表相交,LeetCode142.環(huán)形鏈表II

    LeetCode24. 兩兩交換鏈表中的節(jié)點(diǎn) 題目鏈接:24. 兩兩交換鏈表中的節(jié)點(diǎn) - 力扣(LeetCode) 思路: 先定義一個(gè)虛擬頭結(jié)點(diǎn)方便操作。 再就是交換相鄰兩個(gè)元素了, 此時(shí)一定要畫圖,不畫圖,操作多個(gè)指針很容易亂,而且要操作的先后順序 初始時(shí),cur指向虛擬頭結(jié)點(diǎn),然后進(jìn)行

    2024年02月09日
    瀏覽(24)
  • 代碼隨想錄 - 鏈表

    代碼隨想錄 - 鏈表

    鏈表是一種通過指針串聯(lián)的線性結(jié)構(gòu),每一個(gè)節(jié)點(diǎn)由兩部分組成,一個(gè)是數(shù)據(jù)域一個(gè)是指針域(存放指向下一個(gè)節(jié)點(diǎn)的指針),最后一個(gè)節(jié)點(diǎn)的指針域指向null(空指針的意思)。 鏈表的類型? 1、單鏈表? 單鏈表中的指針域只能指向節(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn)。? 2、雙鏈表 雙鏈表:

    2024年02月13日
    瀏覽(23)
  • 代碼隨想錄-鏈表1( 203.移除鏈表元素、)

    203. 移除鏈表元素 707. 設(shè)計(jì)鏈表 206. 反轉(zhuǎn)鏈表 ??????? 自己寫的是從后往前去反轉(zhuǎn),沒想到可以從前往后反轉(zhuǎn)的方法,以為地址不連續(xù)并且無法根據(jù)索引找地址就沒辦法做,看了雙指針方法后才發(fā)現(xiàn)如何從前往后反轉(zhuǎn),其實(shí)只要記錄每個(gè)結(jié)點(diǎn)的地址就可以了,還是對(duì)鏈表的

    2024年02月19日
    瀏覽(22)
  • 代碼隨想錄算法訓(xùn)練day4 | 鏈表

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

    2024年02月04日
    瀏覽(90)
  • 代碼隨想錄復(fù)習(xí) 203 移除鏈表元素

    代碼如下? /** ?*?Definition?for?singly-linked?list. ?*?type?ListNode?struct?{ ?*?????Val?int ?*?????Next?*ListNode ?*?} ?*/ func?removeElements(head?*ListNode,?val?int)?*ListNode?{ ?????????????prehead?:=?ListNode{}? ?//設(shè)置一個(gè)虛擬頭結(jié)點(diǎn)? ???????? ?????????????prehead.Next?

    2024年02月03日
    瀏覽(20)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包