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

【數(shù)據(jù)結(jié)構(gòu)】反轉(zhuǎn)鏈表、鏈表的中間節(jié)點(diǎn)、鏈表的回文結(jié)構(gòu)(單鏈表OJ題)

這篇具有很好參考價(jià)值的文章主要介紹了【數(shù)據(jù)結(jié)構(gòu)】反轉(zhuǎn)鏈表、鏈表的中間節(jié)點(diǎn)、鏈表的回文結(jié)構(gòu)(單鏈表OJ題)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

正如標(biāo)題所說,本文會(huì)圖文詳細(xì)解析三道單鏈表OJ題,分別為:

  1. ?反轉(zhuǎn)鏈表 (簡(jiǎn)單)
  2. ?鏈表的中間節(jié)點(diǎn) (簡(jiǎn)單)
  3. ?鏈表的回文結(jié)構(gòu) (較難)

把他們放在一起講的原因是:?反轉(zhuǎn)鏈表 ?鏈表的中間節(jié)點(diǎn) ?鏈表的回文結(jié)構(gòu) 的基礎(chǔ)

為什么這樣說?請(qǐng)往下看:

目錄

1. 反轉(zhuǎn)鏈表

做題思路

畫圖理解

代碼實(shí)現(xiàn)

2. 鏈表的中間節(jié)點(diǎn)

做題思路

畫圖理解

代碼實(shí)現(xiàn)

3. 鏈表的回文結(jié)構(gòu)

做題思路

畫圖理解

代碼實(shí)現(xiàn)


1. 反轉(zhuǎn)鏈表

【數(shù)據(jù)結(jié)構(gòu)】反轉(zhuǎn)鏈表、鏈表的中間節(jié)點(diǎn)、鏈表的回文結(jié)構(gòu)(單鏈表OJ題),數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),鏈表,c語言

LeetCode鏈接:206. 反轉(zhuǎn)鏈表 - 力扣(LeetCode)

??做題思路

  • 遍歷鏈表,改變每個(gè)節(jié)點(diǎn)的鏈接方向,使其鏈向前節(jié)點(diǎn)
  • 如果是第一個(gè)節(jié)點(diǎn),使其鏈向 NULL?

【數(shù)據(jù)結(jié)構(gòu)】反轉(zhuǎn)鏈表、鏈表的中間節(jié)點(diǎn)、鏈表的回文結(jié)構(gòu)(單鏈表OJ題),數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),鏈表,c語言

這里需要3個(gè)指針:

  • ?cur 指向當(dāng)前需要修改的節(jié)點(diǎn)
  • ?prev 記錄?cur 的前一個(gè)節(jié)點(diǎn), cur 要鏈向此節(jié)點(diǎn)
  • ?next 記錄 cur 的后一個(gè)節(jié)點(diǎn),避免 cur 改變鏈接方向后找不到下個(gè)節(jié)點(diǎn)

??畫圖理解

【數(shù)據(jù)結(jié)構(gòu)】反轉(zhuǎn)鏈表、鏈表的中間節(jié)點(diǎn)、鏈表的回文結(jié)構(gòu)(單鏈表OJ題),數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),鏈表,c語言

??代碼實(shí)現(xiàn)

struct ListNode* reverseList(struct ListNode* head)
{
    struct ListNode* cur = head;
    struct ListNode* prev = NULL;
    while (cur != NULL)
    {
        struct ListNode* next = cur->next;
        cur->next = prev;
        prev = cur;
        cur = next;
    }
    return prev;
}

最后提交代碼試試:

【數(shù)據(jù)結(jié)構(gòu)】反轉(zhuǎn)鏈表、鏈表的中間節(jié)點(diǎn)、鏈表的回文結(jié)構(gòu)(單鏈表OJ題),數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),鏈表,c語言

完美通過,本題并不難,來搞下一題


2. 鏈表的中間節(jié)點(diǎn)

【數(shù)據(jù)結(jié)構(gòu)】反轉(zhuǎn)鏈表、鏈表的中間節(jié)點(diǎn)、鏈表的回文結(jié)構(gòu)(單鏈表OJ題),數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),鏈表,c語言

LeetCode鏈接:876. 鏈表的中間結(jié)點(diǎn) - 力扣(LeetCode)

??做題思路

  • 快慢指針
  • 搞兩個(gè)指針,一個(gè)叫 fast ,一個(gè)叫 slow?
  • 快指針 fast 一次走兩步
  • 慢指針 slow 一次走一步
  • 當(dāng) fast 走到 NULL 時(shí), slow 恰好在中間,此時(shí) slow 指向的節(jié)點(diǎn)就是中間節(jié)點(diǎn)

??畫圖理解

【數(shù)據(jù)結(jié)構(gòu)】反轉(zhuǎn)鏈表、鏈表的中間節(jié)點(diǎn)、鏈表的回文結(jié)構(gòu)(單鏈表OJ題),數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),鏈表,c語言

??代碼實(shí)現(xiàn)

struct ListNode* middleNode(struct ListNode* head)
{
    struct ListNode* slow = head;
    struct ListNode* fast = head;
    while (fast != NULL && fast->next != NULL)
    {
        slow = slow->next;
        fast = fast->next->next;
    }
    return slow;
}

提交代碼:

【數(shù)據(jù)結(jié)構(gòu)】反轉(zhuǎn)鏈表、鏈表的中間節(jié)點(diǎn)、鏈表的回文結(jié)構(gòu)(單鏈表OJ題),數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),鏈表,c語言

這道題也很簡(jiǎn)單,主要就是快慢指針的思路,第一次接觸的話可能想不到這種方法

接下來就是本文重點(diǎn)了,前面這些只是開胃小菜


3. 鏈表的回文結(jié)構(gòu)

【數(shù)據(jù)結(jié)構(gòu)】反轉(zhuǎn)鏈表、鏈表的中間節(jié)點(diǎn)、鏈表的回文結(jié)構(gòu)(單鏈表OJ題),數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),鏈表,c語言

牛客鏈接:鏈表的回文結(jié)構(gòu)_??皖}霸_??途W(wǎng) (nowcoder.com)

??做題思路

1. 找到中間節(jié)點(diǎn)

2. 反轉(zhuǎn)中間節(jié)點(diǎn)及其之后的鏈表

3. 此時(shí)把鏈表分為兩段:

  • 未反轉(zhuǎn)的鏈表為一段,用指針?list1 指向這段鏈表的頭節(jié)點(diǎn)
  • 反轉(zhuǎn)過的鏈表為另一段,用指針 list2 指向這段鏈表的頭節(jié)點(diǎn)

4. 比較 list1 list2 節(jié)點(diǎn)的值是否相等

  • 如果相等, list1 list2 同時(shí)往后走,去比較下一組數(shù)據(jù)
  • 如果不相等,說明鏈表不是回文結(jié)構(gòu),返回 false?

5. 當(dāng) list2 走到 NULL 處時(shí),說明此鏈表是回文結(jié)構(gòu),返回 true?

??畫圖理解

【數(shù)據(jù)結(jié)構(gòu)】反轉(zhuǎn)鏈表、鏈表的中間節(jié)點(diǎn)、鏈表的回文結(jié)構(gòu)(單鏈表OJ題),數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),鏈表,c語言

可以看到本題需要調(diào)用之前寫過的代碼

這就是為什么我說前兩道題是本題的基礎(chǔ)

??代碼實(shí)現(xiàn)

//找鏈表的中間節(jié)點(diǎn)
struct ListNode* middleNode(struct ListNode* head)
{
    struct ListNode* slow = head;
    struct ListNode* fast = head;
    while (fast != NULL && fast->next != NULL)
    {
        slow = slow->next;
        fast = fast->next->next;
    }
    return slow;
}

//反轉(zhuǎn)鏈表
struct ListNode* reverseList(struct ListNode* head)
{
    struct ListNode* cur = head;
    struct ListNode* prev = NULL;
    while (cur != NULL)
    {
        struct ListNode* next = cur->next;
        cur->next = prev;
        prev = cur;
        cur = next;
    }
    return prev;
}

//??瓦@道題不支持用C語言答題
//雖然我們還沒有學(xué)C++,但是C++是兼容C的
//直接用C的方式寫代碼即可
class PalindromeList
{
public:
    bool chkPalindrome(ListNode* head)
    {
        struct ListNode* list1 = head;
        struct ListNode* mid = middleNode(head);
        struct ListNode* list2 = reverseList(mid);
        while (list2 != NULL)
        {
            if (list1->val != list2->val)
            {
                return false;
            }
            list1 = list1->next;
            list2 = list2->next;
        }
        return true;
    }
};

提交代碼:

【數(shù)據(jù)結(jié)構(gòu)】反轉(zhuǎn)鏈表、鏈表的中間節(jié)點(diǎn)、鏈表的回文結(jié)構(gòu)(單鏈表OJ題),數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),鏈表,c語言

成功通過

怎么樣,大家看到這里把這三道題弄懂了嗎?如果有問題可以在評(píng)論區(qū)留言哦 :D


?本文完文章來源地址http://www.zghlxwxcb.cn/news/detail-646093.html

到了這里,關(guān)于【數(shù)據(jù)結(jié)構(gòu)】反轉(zhuǎn)鏈表、鏈表的中間節(jié)點(diǎn)、鏈表的回文結(jié)構(gòu)(單鏈表OJ題)的文章就介紹完了。如果您還想了解更多內(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)文章

  • 數(shù)據(jù)結(jié)構(gòu):圖文詳解單鏈表的各種操作(頭插法,尾插法,任意位置插入,刪除節(jié)點(diǎn),查詢節(jié)點(diǎn),求鏈表的長(zhǎng)度,清空鏈表)

    數(shù)據(jù)結(jié)構(gòu):圖文詳解單鏈表的各種操作(頭插法,尾插法,任意位置插入,刪除節(jié)點(diǎn),查詢節(jié)點(diǎn),求鏈表的長(zhǎng)度,清空鏈表)

    目錄 ?一.什么是鏈表 二.鏈表的實(shí)現(xiàn) 節(jié)點(diǎn)的插入 頭插法 尾插法 指定位置插入 節(jié)點(diǎn)的刪除 刪除第一次出現(xiàn)的節(jié)點(diǎn) 刪除所有節(jié)點(diǎn) 節(jié)點(diǎn)的查找 鏈表的清空 鏈表的長(zhǎng)度 前言: 在上一篇文章中,我們認(rèn)識(shí)了線性數(shù)據(jù)結(jié)構(gòu)中的順序表,而本篇文章則是介紹線性數(shù)據(jù)結(jié)

    2024年02月05日
    瀏覽(104)
  • 【數(shù)據(jù)結(jié)構(gòu)-鏈表-01】反轉(zhuǎn)鏈表

    【數(shù)據(jù)結(jié)構(gòu)-鏈表-01】反轉(zhuǎn)鏈表

    ??????歡迎來到我的博客,很高興能夠在這里和您見面!希望您在這里可以感受到一份輕松愉快的氛圍,不僅可以獲得有趣的內(nèi)容和知識(shí),也可以暢所欲言、分享您的想法和見解。 推薦:kuan 的首頁,持續(xù)學(xué)習(xí),不斷總結(jié),共同進(jìn)步,活到老學(xué)到老 導(dǎo)航 檀越劍指大廠系列:全面總

    2024年02月10日
    瀏覽(28)
  • 反轉(zhuǎn)鏈表、鏈表的中間結(jié)點(diǎn)、合并兩個(gè)有序鏈表【LeetCode刷題日志】

    反轉(zhuǎn)鏈表、鏈表的中間結(jié)點(diǎn)、合并兩個(gè)有序鏈表【LeetCode刷題日志】

    給你單鏈表的頭節(jié)點(diǎn) head ,請(qǐng)你反轉(zhuǎn)鏈表,并返回反轉(zhuǎn)后的鏈表。 力扣(LeetCode)官網(wǎng) - 全球極客摯愛的技術(shù)成長(zhǎng)平臺(tái) 這里解釋一下三個(gè)指針的作用: n1:記錄上一個(gè)節(jié)點(diǎn),如果是第一個(gè)就指向空 n2:記錄此節(jié)點(diǎn)的位置 n3:記錄下一個(gè)節(jié)點(diǎn)的位置,讓翻轉(zhuǎn)后能找到下一個(gè)節(jié)點(diǎn)

    2024年02月03日
    瀏覽(24)
  • 【算法入門&鏈表】【模板】鏈表|反轉(zhuǎn)鏈表|合并排序鏈表|刪除鏈表的節(jié)點(diǎn)

    【算法入門&鏈表】【模板】鏈表|反轉(zhuǎn)鏈表|合并排序鏈表|刪除鏈表的節(jié)點(diǎn)

    ?作者簡(jiǎn)介:熱愛后端語言的大學(xué)生,CSDN內(nèi)容合伙人 ?精品專欄:C++面向?qū)ο???系列專欄:算法百煉成神 本專欄收錄的均為牛客網(wǎng)的算法題目,內(nèi)含鏈表、雙指針、遞歸、動(dòng)態(tài)規(guī)劃、基本數(shù)據(jù)結(jié)構(gòu)等算法思想的具體運(yùn)用。??途W(wǎng)不僅有大量的經(jīng)典算法題目,也有大廠的面

    2024年02月17日
    瀏覽(20)
  • 【數(shù)據(jù)結(jié)構(gòu)和算法】反轉(zhuǎn)鏈表

    【數(shù)據(jù)結(jié)構(gòu)和算法】反轉(zhuǎn)鏈表

    Java基礎(chǔ)合集 數(shù)據(jù)結(jié)構(gòu)與算法合集 設(shè)計(jì)模式合集 多線程合集 分布式合集 ES合集 其他系列文章導(dǎo)航 文章目錄 前言 一、題目描述 二、題解 2.1 方法一:迭代(雙指針) 2.2?方法二:遞歸 三、代碼 3.1 方法一:迭代(雙指針) 3.2?方法二:遞歸 四、復(fù)雜度分析 4.1 方法一:迭代

    2024年01月18日
    瀏覽(32)
  • 【leetcode】鏈表的中間節(jié)點(diǎn)|鏈表中倒數(shù)第k個(gè)節(jié)點(diǎn)

    【leetcode】鏈表的中間節(jié)點(diǎn)|鏈表中倒數(shù)第k個(gè)節(jié)點(diǎn)

    目錄 1.鏈表的中間節(jié)點(diǎn) 2.鏈表中倒數(shù)第k個(gè)節(jié)點(diǎn)? 思路1:遍歷鏈表,統(tǒng)計(jì)節(jié)點(diǎn)個(gè)數(shù)count,返回第count/2 +1個(gè)節(jié)點(diǎn)? ??Note: 注意循環(huán)條件為--mid,--mid循環(huán)執(zhí)行mid-1次,mid--循環(huán)mid次,返回的是中間節(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn) 思路二:快慢指針 設(shè)置一個(gè)慢指針slow,一個(gè)快指針fast,慢指針一

    2024年02月15日
    瀏覽(17)
  • LC-鏈表的中間節(jié)點(diǎn)(雙指針)

    LC-鏈表的中間節(jié)點(diǎn)(雙指針)

    鏈接:https://leetcode.cn/problems/middle-of-the-linked-list/description/ 描述:給你單鏈表的頭結(jié)點(diǎn) head ,請(qǐng)你找出并返回鏈表的中間結(jié)點(diǎn)。 如果有兩個(gè)中間結(jié)點(diǎn),則返回第二個(gè)中間結(jié)點(diǎn)。 輸入:head = [1,2,3,4,5] 輸出:[3,4,5] 解釋:鏈表只有一個(gè)中間結(jié)點(diǎn),值為 3 。 輸入:head = [1,2,3,4,5,6

    2024年02月12日
    瀏覽(24)
  • <數(shù)據(jù)結(jié)構(gòu)> 鏈表 - 鏈表的概念及結(jié)構(gòu)

    <數(shù)據(jù)結(jié)構(gòu)> 鏈表 - 鏈表的概念及結(jié)構(gòu)

    概念: 鏈表是一種物理存儲(chǔ)結(jié)構(gòu)上非連續(xù)、非順序的存儲(chǔ)結(jié)構(gòu),數(shù)據(jù)元素的 邏輯順序 是通過鏈表中的 指針鏈接 次序?qū)崿F(xiàn)的 1、鏈表由一系列結(jié)點(diǎn)(鏈表中每一個(gè)元素稱為結(jié)點(diǎn))組成。 2、結(jié)點(diǎn)可以在運(yùn)行時(shí)動(dòng)態(tài)(malloc)生成。 3、每個(gè)結(jié)點(diǎn)包括兩個(gè)部分:一個(gè)是存儲(chǔ)數(shù)據(jù)元素的

    2023年04月09日
    瀏覽(52)
  • 【數(shù)據(jù)結(jié)構(gòu)】鏈表的回文結(jié)構(gòu)

    【數(shù)據(jù)結(jié)構(gòu)】鏈表的回文結(jié)構(gòu)

    單鏈表的操作算法是筆試面試中較為常見的題目。 本文將著重介紹平時(shí)面試中常見的關(guān)于鏈表的應(yīng)用題目,馬上要進(jìn)行秋招了。希望對(duì)你們有幫助 _ ?? 對(duì)于一個(gè)鏈表,請(qǐng)?jiān)O(shè)計(jì)一個(gè)時(shí)間復(fù)雜度為O(n),額外空間復(fù)雜度為O(1)的算法,判斷其是否為回文結(jié)構(gòu)。 給定一個(gè)鏈表的頭指針

    2024年02月12日
    瀏覽(27)
  • 【Leetcode】移除鏈表元素 鏈表的中間節(jié)點(diǎn) 鏈表中倒數(shù)第k個(gè)節(jié)點(diǎn)

    【Leetcode】移除鏈表元素 鏈表的中間節(jié)點(diǎn) 鏈表中倒數(shù)第k個(gè)節(jié)點(diǎn)

    目錄 一.【Leetcode203】移除鏈表元素 1.鏈接 2.題目再現(xiàn) ?A.雙指針法 B.類尾刪法 C.哨兵位 二.【Leetcode876】鏈表的中間節(jié)點(diǎn) 1.鏈接:鏈表的中間節(jié)點(diǎn) 2.題目再現(xiàn) 3.解法:快慢指針 三.鏈表中倒數(shù)第k個(gè)節(jié)點(diǎn) 1.鏈接:鏈表中倒數(shù)第k個(gè)節(jié)點(diǎn) 2.題目再現(xiàn) 3.解法 :快慢指針 1.鏈接 移除鏈表

    2024年02月01日
    瀏覽(25)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包