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

【數(shù)據(jù)結(jié)構(gòu)】鏈表相關(guān)題目(簡(jiǎn)單版)

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

《簡(jiǎn)明數(shù)據(jù)結(jié)構(gòu)》鏈表專題編程測(cè)驗(yàn)題,初階數(shù)據(jù)結(jié)構(gòu),鏈表,數(shù)據(jù)結(jié)構(gòu),leetcode

??write in front??
??所屬專欄: 初階數(shù)據(jù)結(jié)構(gòu)
???博客主頁(yè):睿睿的博客主頁(yè)
???代碼倉(cāng)庫(kù):??VS2022_C語(yǔ)言倉(cāng)庫(kù)
??您的點(diǎn)贊、關(guān)注、收藏、評(píng)論,是對(duì)我最大的激勵(lì)和支持!??!
關(guān)注我,關(guān)注我,關(guān)注我,你們將會(huì)看到更多的優(yōu)質(zhì)內(nèi)容?。?/p>

《簡(jiǎn)明數(shù)據(jù)結(jié)構(gòu)》鏈表專題編程測(cè)驗(yàn)題,初階數(shù)據(jù)結(jié)構(gòu),鏈表,數(shù)據(jù)結(jié)構(gòu),leetcode

前言

??在學(xué)完了順序表的基本知識(shí)后,我們可以通過(guò)一些習(xí)題來(lái)鞏固所學(xué)知識(shí)!

習(xí)題1:

刪除鏈表中等于給定值 val 的所有結(jié)點(diǎn)。oj鏈接
《簡(jiǎn)明數(shù)據(jù)結(jié)構(gòu)》鏈表專題編程測(cè)驗(yàn)題,初階數(shù)據(jù)結(jié)構(gòu),鏈表,數(shù)據(jù)結(jié)構(gòu),leetcode
這道題目有兩種做法:

  • 方法一:雙指針的遍歷,通過(guò)雙指針來(lái)查找刪除節(jié)點(diǎn)并連接后面的節(jié)點(diǎn),但是缺點(diǎn)就是會(huì)有特殊情況需要考慮(頭刪的情況),代碼如下:
    《簡(jiǎn)明數(shù)據(jù)結(jié)構(gòu)》鏈表專題編程測(cè)驗(yàn)題,初階數(shù)據(jù)結(jié)構(gòu),鏈表,數(shù)據(jù)結(jié)構(gòu),leetcode
  • 方法2:通過(guò)遍歷,將節(jié)點(diǎn)尾插到新鏈表,最后返回新鏈表,代碼如下:
struct ListNode* removeElements(struct ListNode* head, int val)
{
    struct ListNode*cur=head,*newnode=NULL,*tail=NULL;
    while(cur)
    {
        if(cur->val!=val)
        {
            if(newnode==NULL)
            {
                newnode=cur;
                tail=cur;
            }
            else
            {
                tail->next=cur;
                tail=tail->next;
            }
          cur=cur->next;
        }
        else
        {
            struct ListNode*next=cur;
            cur=next->next;
            free(next);
        }
    }
if(tail)
{
    tail->next=NULL;
}
  return newnode;
}

習(xí)題2

反轉(zhuǎn)一個(gè)單鏈表。oj鏈接
《簡(jiǎn)明數(shù)據(jù)結(jié)構(gòu)》鏈表專題編程測(cè)驗(yàn)題,初階數(shù)據(jù)結(jié)構(gòu),鏈表,數(shù)據(jù)結(jié)構(gòu),leetcode
這道題也有兩種方法,

  • 方法1:用三指針的方法,前兩個(gè)來(lái)改變每個(gè)節(jié)點(diǎn)的鏈接關(guān)系,最后一個(gè)節(jié)點(diǎn)用來(lái)標(biāo)記位置方便遍歷鏈表
    《簡(jiǎn)明數(shù)據(jù)結(jié)構(gòu)》鏈表專題編程測(cè)驗(yàn)題,初階數(shù)據(jù)結(jié)構(gòu),鏈表,數(shù)據(jù)結(jié)構(gòu),leetcode
    代碼如下:
    《簡(jiǎn)明數(shù)據(jù)結(jié)構(gòu)》鏈表專題編程測(cè)驗(yàn)題,初階數(shù)據(jù)結(jié)構(gòu),鏈表,數(shù)據(jù)結(jié)構(gòu),leetcode
  • 方法2:取每個(gè)節(jié)點(diǎn)頭插到新鏈表:

《簡(jiǎn)明數(shù)據(jù)結(jié)構(gòu)》鏈表專題編程測(cè)驗(yàn)題,初階數(shù)據(jù)結(jié)構(gòu),鏈表,數(shù)據(jù)結(jié)構(gòu),leetcode

習(xí)題3

給定一個(gè)帶有頭結(jié)點(diǎn) head 的非空單鏈表,返回鏈表的中間結(jié)點(diǎn)。如果有兩個(gè)中間結(jié)點(diǎn),則返回第二個(gè)中間結(jié)點(diǎn)。oj鏈接
《簡(jiǎn)明數(shù)據(jù)結(jié)構(gòu)》鏈表專題編程測(cè)驗(yàn)題,初階數(shù)據(jù)結(jié)構(gòu),鏈表,數(shù)據(jù)結(jié)構(gòu),leetcode
??這里我們就要介紹一下快慢指針了。通過(guò)快慢指針我們可以解決很多問(wèn)題,以后都會(huì)用到。
??那么什么是快慢指針呢?
??顧名思義,快慢指針就是通過(guò)兩個(gè)不同指針步長(zhǎng)的不同來(lái)遍歷鏈表。
《簡(jiǎn)明數(shù)據(jù)結(jié)構(gòu)》鏈表專題編程測(cè)驗(yàn)題,初階數(shù)據(jù)結(jié)構(gòu),鏈表,數(shù)據(jù)結(jié)構(gòu),leetcode
??這道題我們讓一個(gè)指針走兩步,一個(gè)指針走一步,當(dāng)快指針指向空或快指針的next指向空的時(shí)候,慢指針指向位置就是中間節(jié)點(diǎn)位置。

struct ListNode* middleNode(struct ListNode* head)
{
    struct ListNode*slow=head,*fast=head;

    while(fast!=NULL&&fast->next!=NULL)
    {
        slow=slow->next;
        fast=fast->next->next;
    }
    return slow;
}

衍生題1:

輸入一個(gè)鏈表,輸出該鏈表中倒數(shù)第k個(gè)結(jié)點(diǎn)。oj鏈接
《簡(jiǎn)明數(shù)據(jù)結(jié)構(gòu)》鏈表專題編程測(cè)驗(yàn)題,初階數(shù)據(jù)結(jié)構(gòu),鏈表,數(shù)據(jù)結(jié)構(gòu),leetcode
??其實(shí)也是快慢指針的思想,只是這里不是步長(zhǎng)的不同,而是起點(diǎn)不同:
??要尋找倒數(shù)第k個(gè)節(jié)點(diǎn),就讓快指針的起點(diǎn)在慢指針的后k步。當(dāng)快指針指向空的時(shí)候,慢指針就指向倒數(shù)第k個(gè)節(jié)點(diǎn)。

struct ListNode* FindKthToTail(struct ListNode* pListHead, int k ) {
    // write code here
    struct ListNode* slow=pListHead;
    struct ListNode* fast=pListHead;
   
    while(k--)
    {
       
         if(fast==NULL)
    {
        return NULL;
    }
     fast=fast->next;
    }
    while(fast)
    {
        fast=fast->next;
        slow=slow->next;
    }
    return slow;
}

衍生題2:

給定一個(gè)鏈表,判斷鏈表中是否有環(huán)。oj鏈接
《簡(jiǎn)明數(shù)據(jù)結(jié)構(gòu)》鏈表專題編程測(cè)驗(yàn)題,初階數(shù)據(jù)結(jié)構(gòu),鏈表,數(shù)據(jù)結(jié)構(gòu),leetcode
??這道題也是用快慢指針,即慢指針一次走一步,快指針一次走兩步,兩個(gè)指針從鏈表起始位置開始運(yùn)行,如果鏈表帶環(huán)則一定會(huì)在環(huán)中相遇,否則快指針率先走到鏈表的末尾。比如:陪女朋友到操作跑步減肥。

??那么,為什么快指針每次走兩步,慢指針走一步可以?
??假設(shè)鏈表帶環(huán),兩個(gè)指針最后都會(huì)進(jìn)入環(huán),快指針先進(jìn)環(huán),慢指針后進(jìn)環(huán)。
??此時(shí),兩個(gè)指針每移動(dòng)一次,之間的距離就縮小一步,不會(huì)出現(xiàn)每次剛好是套圈的情況,因此:在滿指針走到一圈之前,快指針肯定是可以追上慢指針的,即相遇。
代碼如下:

bool hasCycle(struct ListNode *head) 
{
    struct ListNode*fast=head,*slow=head;
    if(head==NULL||head->next==NULL)
    {
        return false;
    }
    fast=fast->next;
    while(fast!=slow)
    {
        if(fast==NULL||fast->next==NULL)
            break;
        fast=fast->next->next;
        slow=slow->next;
    }
    if(fast==slow)
    return true;
    return false;
}

習(xí)題4:

將兩個(gè)有序鏈表合并為一個(gè)新的有序鏈表并返回。新鏈表是通過(guò)拼接給定的兩個(gè)鏈表的所有結(jié)點(diǎn)組成的oj鏈表

??這道題引入了哨兵位,也就是空的頭節(jié)點(diǎn)。其實(shí),對(duì)于鏈表尾插的時(shí)候,需要判斷是否為空,比較麻煩,只要我們創(chuàng)建一個(gè)空的頭節(jié)點(diǎn)就可以避免很多情況。

??鏈表在頭插的時(shí)候我們不需要頭節(jié)點(diǎn);
??鏈表在尾插的有空的頭節(jié)點(diǎn)會(huì)更方便。
《簡(jiǎn)明數(shù)據(jù)結(jié)構(gòu)》鏈表專題編程測(cè)驗(yàn)題,初階數(shù)據(jù)結(jié)構(gòu),鏈表,數(shù)據(jù)結(jié)構(gòu),leetcode

struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2)
{
    struct ListNode*newnode=(struct ListNode*)malloc(sizeof(struct ListNode));
    struct ListNode*tail=newnode;
    tail->next=NULL;
    while(list1&&list2)
    {
        if(list1->val<list2->val)
        {
            tail->next=list1;
            tail=list1;
            list1=list1->next;
        }
        else
        {
            tail->next=list2;
            tail=list2;
            list2=list2->next;
        }
    }

if(list1)
    tail->next=list1;
if(list2)
    tail->next=list2;

    return newnode->next;
}

習(xí)題5:

編寫代碼,以給定值x為基準(zhǔn)將鏈表分割成兩部分,所有小于x的結(jié)點(diǎn)排在大于或等于x的結(jié)點(diǎn)之前 。oj鏈接

《簡(jiǎn)明數(shù)據(jù)結(jié)構(gòu)》鏈表專題編程測(cè)驗(yàn)題,初階數(shù)據(jù)結(jié)構(gòu),鏈表,數(shù)據(jù)結(jié)構(gòu),leetcode
??這道題我們創(chuàng)建兩個(gè)新鏈表(帶有哨兵位的空頭節(jié)點(diǎn)),小于的尾插到一個(gè)鏈表,大于的尾插到另外一個(gè)鏈表,最后將他們連起來(lái)即可。

class Partition {
public:
    ListNode* partition(ListNode* pHead, int x) 
    {
        // write code here
        struct ListNode*greaternode=NULL;
        struct ListNode*lessnode=NULL,*cur=pHead;
       
        struct ListNode* gtail=greaternode,*ltail=lessnode;
        while(cur!=NULL)
        {
            if(cur->val>=x)
            {
                gtail->next=cur;
                gtail=cur;
                cur=cur->next;
                gtail->next=NULL;
            }
            else
            {
                ltail->next=cur;
                ltail=cur;
                cur=cur->next;
                ltail->next=NULL;
            }
        }
        ltail->next=greaternode->next;
        return lessnode->next;
    }
};

總結(jié)

??還是那句話,數(shù)據(jù)結(jié)構(gòu)需要多畫圖,并且對(duì)各種情況要有十足的把握才能做對(duì)題目。
??更新不易,辛苦各位小伙伴們動(dòng)動(dòng)小手,??三連走一走???? ~ ~ ~ 你們真的對(duì)我很重要!最后,本文仍有許多不足之處,歡迎各位認(rèn)真讀完文章的小伙伴們隨時(shí)私信交流、批評(píng)指正!

專欄訂閱:
每日一題
c語(yǔ)言學(xué)習(xí)
算法
智力題
初階數(shù)據(jù)結(jié)構(gòu)
更新不易,辛苦各位小伙伴們動(dòng)動(dòng)小手,??三連走一走???? ~ ~ ~ 你們真的對(duì)我很重要!最后,本文仍有許多不足之處,歡迎各位認(rèn)真讀完文章的小伙伴們隨時(shí)私信交流、批評(píng)指正!

《簡(jiǎn)明數(shù)據(jù)結(jié)構(gòu)》鏈表專題編程測(cè)驗(yàn)題,初階數(shù)據(jù)結(jié)構(gòu),鏈表,數(shù)據(jù)結(jié)構(gòu),leetcode文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-806373.html

到了這里,關(guān)于【數(shù)據(jù)結(jié)構(gòu)】鏈表相關(guān)題目(簡(jiǎn)單版)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(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)】二叉樹的相關(guān)操作以及OJ題目

    【數(shù)據(jù)結(jié)構(gòu)】二叉樹的相關(guān)操作以及OJ題目

    當(dāng)一個(gè)樹不是滿二叉樹或完全二叉樹時(shí),它是不適合使用數(shù)組存儲(chǔ)的,它應(yīng)該使用鏈?zhǔn)浇Y(jié)構(gòu)來(lái)存儲(chǔ)。 再看二叉樹基本操作前,再回顧下二叉樹的概念,二叉樹是: 空樹 非空:根節(jié)點(diǎn),根節(jié)點(diǎn)的左子樹、根節(jié)點(diǎn)的右子樹組成的。 從概念中可以看出,二叉樹定義是遞歸式的,因

    2024年03月19日
    瀏覽(20)
  • 【C語(yǔ)言&&數(shù)據(jù)結(jié)構(gòu)】簡(jiǎn)單題目

    【C語(yǔ)言&&數(shù)據(jù)結(jié)構(gòu)】簡(jiǎn)單題目

    ?作者:@平凡的人1 ?專欄:《小菜鳥愛(ài)刷題》 ?一句話:凡是過(guò)往,皆為序章 ?說(shuō)明: 過(guò)去無(wú)可挽回, 未來(lái)可以改變 為了方便自己的學(xué)習(xí)以及基于好久沒(méi)更新博客的原因。特地寫了這一篇博客 。?? 本篇博客是一篇記錄學(xué)習(xí)篇,我將之歸納于刷題專欄。方便自己的復(fù)習(xí)以

    2023年04月08日
    瀏覽(28)
  • 【數(shù)據(jù)結(jié)構(gòu)和算法初階(C語(yǔ)言)】復(fù)雜鏈表(隨機(jī)指針,隨機(jī)鏈表的復(fù)制)題目詳解+鏈表順序表結(jié)尾

    【數(shù)據(jù)結(jié)構(gòu)和算法初階(C語(yǔ)言)】復(fù)雜鏈表(隨機(jī)指針,隨機(jī)鏈表的復(fù)制)題目詳解+鏈表順序表結(jié)尾

    目錄 ?1.隨機(jī)鏈表的復(fù)制 1.2題目描述? 1.3題目分析 1.4解題: 2.順序表和鏈表對(duì)比 2.1cpu高速緩存利用率 3.結(jié)語(yǔ) 一個(gè)長(zhǎng)度為? n ?的鏈表,每個(gè)節(jié)點(diǎn)包含一個(gè)額外增加的隨機(jī)指針? random ? 該指針可以指向鏈表中的任何節(jié)點(diǎn)或空節(jié)點(diǎn)。? ? ? ? 構(gòu)造這個(gè)鏈表的? 深拷貝 。?深拷貝

    2024年03月10日
    瀏覽(94)
  • 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)題目——鏈表綜合算法設(shè)計(jì)、帶頭雙向循環(huán)鏈表、插入、顯示、刪除、修改、排序

    數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)題目——鏈表綜合算法設(shè)計(jì)、帶頭雙向循環(huán)鏈表、插入、顯示、刪除、修改、排序

    ??課程設(shè)計(jì)題目1–鏈表綜合算法設(shè)計(jì) ??一、設(shè)計(jì)內(nèi)容 ??已知簡(jiǎn)單的人事信息系統(tǒng)中職工記錄包含職工編號(hào)(no)、職工姓名(name)、部門名稱(depname)、職稱(title)和工資數(shù)(salary)等信息(可以增加其他信息),設(shè)計(jì)并完成一個(gè)簡(jiǎn)單的人事信息管理系統(tǒng),要求完成但不

    2024年02月08日
    瀏覽(26)
  • 全面理解鏈表數(shù)據(jù)結(jié)構(gòu):各種節(jié)點(diǎn)操作、做題技巧,易錯(cuò)點(diǎn)分析與題目清單(C++代碼示例,不斷更新)

    全面理解鏈表數(shù)據(jù)結(jié)構(gòu):各種節(jié)點(diǎn)操作、做題技巧,易錯(cuò)點(diǎn)分析與題目清單(C++代碼示例,不斷更新)

    鏈表是一種線性數(shù)據(jù)結(jié)構(gòu),它包含的元素并不是物理上連續(xù)的,而是通過(guò)指針進(jìn)行連接。鏈表中的每個(gè)元素通常由一個(gè)節(jié)點(diǎn)表示,每個(gè)節(jié)點(diǎn)包含一個(gè)數(shù)據(jù)元素和一個(gè)或多個(gè)鏈接(指針)。 鏈表的主要類型包括: 單向鏈表 (Singly Linked List):每個(gè)節(jié)點(diǎn)包含一個(gè)指向下一個(gè)節(jié)點(diǎn)

    2024年02月07日
    瀏覽(25)
  • 【數(shù)據(jù)結(jié)構(gòu)】二叉樹經(jīng)典題目

    【數(shù)據(jù)結(jié)構(gòu)】二叉樹經(jīng)典題目

    相信大部分人看了題目描述之后,都會(huì)和我一樣一臉的懵逼。直到我看到了一個(gè)描述才恍然大悟 分為3種情況: 左右都為空 --省略 右為空,左不為空 – 省略 左為空,右不為空–不省略 這里復(fù)習(xí)一下二叉樹的前序遍歷、中序遍歷、和后序遍歷 前序的結(jié)果是:ABDEGCF 中序的結(jié)

    2024年02月10日
    瀏覽(22)
  • 【數(shù)據(jù)結(jié)構(gòu)】二叉樹常見(jiàn)題目

    【數(shù)據(jù)結(jié)構(gòu)】二叉樹常見(jiàn)題目

    此乃本人自用版本,用于復(fù)習(xí)回顧! 所以部分題目不會(huì)有過(guò)大詳細(xì)的解析,不懂的可以評(píng)論!筆者將竭力為你解答 滿?叉樹:如果?棵?叉樹只有度為0的結(jié)點(diǎn)和度為2的結(jié)點(diǎn),并且度為0的結(jié)點(diǎn)在同?層上,則這棵?叉樹為滿?叉樹 高度為h的滿二叉樹,共有 2^h -1 個(gè)節(jié)點(diǎn) 完全

    2024年02月13日
    瀏覽(24)
  • 【數(shù)據(jù)結(jié)構(gòu)】棧和隊(duì)列常見(jiàn)題目

    【數(shù)據(jù)結(jié)構(gòu)】棧和隊(duì)列常見(jiàn)題目

    隊(duì)列:先進(jìn)先出 棧:后進(jìn)先出 隊(duì)列:先進(jìn)先出 棧:后進(jìn)先出 https://leetcode.cn/problems/valid-parentheses/ 做法:遍歷字符串 1.當(dāng)前字符是左括號(hào):進(jìn)棧 2.當(dāng)前字符是右括號(hào):出棧頂元素和當(dāng)前字符比較是否匹配 特殊情況:如果此時(shí)棧為空,那么說(shuō)明不匹配 3.最后如果棧為空,說(shuō)明

    2024年02月12日
    瀏覽(29)
  • 數(shù)據(jù)結(jié)構(gòu)-鏈表結(jié)構(gòu)-雙向鏈表

    數(shù)據(jù)結(jié)構(gòu)-鏈表結(jié)構(gòu)-雙向鏈表

    雙向鏈表也叫雙鏈表,與單向鏈表不同的是,每一個(gè)節(jié)點(diǎn)有三個(gè)區(qū)域組成:兩個(gè)指針域,一個(gè)數(shù)據(jù)域 前一個(gè)指針域:存儲(chǔ)前驅(qū)節(jié)點(diǎn)的內(nèi)存地址 后一個(gè)指針域:存儲(chǔ)后繼節(jié)點(diǎn)的內(nèi)存地址 數(shù)據(jù)域:存儲(chǔ)節(jié)點(diǎn)數(shù)據(jù) 以下就是雙向鏈表的最基本單位 節(jié)點(diǎn)的前指針域指向前驅(qū),后指針

    2024年02月04日
    瀏覽(31)
  • <數(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ù)元素的 邏輯順序 是通過(guò)鏈表中的 指針鏈接 次序?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)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包