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

C/C++數(shù)據(jù)結(jié)構(gòu)之鏈表題目答案與解析

這篇具有很好參考價值的文章主要介紹了C/C++數(shù)據(jù)結(jié)構(gòu)之鏈表題目答案與解析。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

個人主頁:點(diǎn)我進(jìn)入主頁

專欄分類:C語言初階? ? ??C語言程序設(shè)計————KTV? ? ? ?C語言小游戲? ? ?C語言進(jìn)階

C語言刷題? ? ? ?數(shù)據(jù)結(jié)構(gòu)初階

歡迎大家點(diǎn)贊,評論,收藏。

一起努力,一起奔赴大廠。

目錄

1.前言?

2.題目解析

2.1?移除鏈表元素

2.2反轉(zhuǎn)鏈表

2.3鏈表的中間結(jié)點(diǎn)

2.4鏈表中倒數(shù)第k個結(jié)點(diǎn)

2.5合并兩個有序鏈表

2.6鏈表分割

3.結(jié)語


1.前言?

? ? ? ? 在前面我們講解了一些關(guān)于鏈表的內(nèi)容,其中還有一些關(guān)于鏈表的習(xí)題,今天我們主要對這些題目進(jìn)行解析。

2.題目解析

2.1?移除鏈表元素

給你一個鏈表的頭節(jié)點(diǎn)?head?和一個整數(shù)?val?,請你刪除鏈表中所有滿足?Node.val == val?的節(jié)點(diǎn),并返回?新的頭節(jié)點(diǎn)?。

示例 1:

C/C++數(shù)據(jù)結(jié)構(gòu)之鏈表題目答案與解析,數(shù)據(jù)結(jié)構(gòu)初階,數(shù)據(jù)結(jié)構(gòu),c語言

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

示例 2:

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

示例 3:

輸入:head = [7,7,7,7], val = 7
輸出:[]

提示:

  • 列表中的節(jié)點(diǎn)數(shù)目在范圍?[0, 104]?內(nèi)
  • 1 <= Node.val <= 50
  • 0 <= val <= 50
struct ListNode* removeElements(struct ListNode* head, int val) {
    struct ListNode *phead=(struct ListNode*)malloc(sizeof(struct ListNode));
    phead->next=head;
    struct ListNode *p=phead;
    struct ListNode *q=phead->next;
    if(!q)
        return NULL;
    while(q)
    {
        if(q->val==val)
        {
            p->next=q->next;
            free(q);
            q=p->next;
        }
        else 
        {
            p=p->next;
            q=q->next;
        }
    }
    return phead->next;
}

? ? ? ? 在這里我們需要對鏈表看是不是空的,只有一個節(jié)點(diǎn),有多個節(jié)點(diǎn)這些情況進(jìn)行討論,我們建立一個帶頭節(jié)點(diǎn)的節(jié)點(diǎn),然后將這些連上,先判斷是不是空,不是空兩個指針,一個指向建立的頭節(jié)點(diǎn),另一個指向后一個節(jié)點(diǎn),我們針對后面的節(jié)點(diǎn)進(jìn)行判斷,值相等進(jìn)行去除?操作,最后返回頭節(jié)點(diǎn)的下一個節(jié)點(diǎn)。

2.2反轉(zhuǎn)鏈表

給你單鏈表的頭節(jié)點(diǎn)?head?,請你反轉(zhuǎn)鏈表,并返回反轉(zhuǎn)后的鏈表。

示例 1:

C/C++數(shù)據(jù)結(jié)構(gòu)之鏈表題目答案與解析,數(shù)據(jù)結(jié)構(gòu)初階,數(shù)據(jù)結(jié)構(gòu),c語言

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

示例 2:

C/C++數(shù)據(jù)結(jié)構(gòu)之鏈表題目答案與解析,數(shù)據(jù)結(jié)構(gòu)初階,數(shù)據(jù)結(jié)構(gòu),c語言

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

示例 3:

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

提示:

  • 鏈表中節(jié)點(diǎn)的數(shù)目范圍是?[0, 5000]
  • -5000 <= Node.val <= 5000
struct ListNode* reverseList(struct ListNode* head) {
    struct ListNode *phead=(struct ListNode *)malloc(sizeof(struct ListNode));
    struct ListNode *p=head;
    phead->next=NULL;
    if(!p)
        return NULL;
    struct ListNode *q=p->next;
    while(p)
    {
        p->next=phead->next;
        phead->next=p;
        p=q;
        if(q)
            q=q->next;
    }
    return phead->next;
}

? ? ? ? 我們建立一個頭節(jié)點(diǎn),然后連起來,判斷是不是為空,我們知道頭插相當(dāng)于將數(shù)據(jù)進(jìn)行反轉(zhuǎn),所以我們可以將鏈表一次一次地拆下來,然后頭插到頭節(jié)點(diǎn)上,我們用兩個指針,一個用來記錄位置,一個用來進(jìn)行拆地操作。

2.3鏈表的中間結(jié)點(diǎn)

給你單鏈表的頭結(jié)點(diǎn)?head?,請你找出并返回鏈表的中間結(jié)點(diǎn)。

如果有兩個中間結(jié)點(diǎn),則返回第二個中間結(jié)點(diǎn)。

示例 1:

C/C++數(shù)據(jù)結(jié)構(gòu)之鏈表題目答案與解析,數(shù)據(jù)結(jié)構(gòu)初階,數(shù)據(jù)結(jié)構(gòu),c語言

輸入:head = [1,2,3,4,5]
輸出:[3,4,5]
解釋:鏈表只有一個中間結(jié)點(diǎn),值為 3 。

示例 2:

C/C++數(shù)據(jù)結(jié)構(gòu)之鏈表題目答案與解析,數(shù)據(jù)結(jié)構(gòu)初階,數(shù)據(jù)結(jié)構(gòu),c語言

輸入:head = [1,2,3,4,5,6]
輸出:[4,5,6]
解釋:該鏈表有兩個中間結(jié)點(diǎn),值分別為 3 和 4 ,返回第二個結(jié)點(diǎn)。

提示:

  • 鏈表的結(jié)點(diǎn)數(shù)范圍是?[1, 100]
  • 1 <= Node.val <= 100
struct ListNode* middleNode(struct ListNode* head) {
    struct ListNode*fast=head,*slow=head;
    if(!fast)
        return NULL;
    while(fast&&fast->next)
    {
        fast=(fast->next)->next;
        slow=slow->next;
    }
    return slow;
}

? ? ? ? 我們先對鏈表進(jìn)行判斷是不是空鏈表,然后利用快慢指針進(jìn)行操作,快指針每次走兩步,滿指針每次走一步,當(dāng)快指針為空且快指針地下一個指針不為空就進(jìn)行,知道出現(xiàn)這兩個有一個為空才停止。

2.4鏈表中倒數(shù)第k個結(jié)點(diǎn)

輸入一個鏈表,輸出該鏈表中倒數(shù)第k個結(jié)點(diǎn)。

示例1

輸入:

1,{1,2,3,4,5}

復(fù)制返回值:

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

? ? ? ? 在這里我們同樣用快慢指針,我們先讓快指針走k步如果在k次中出現(xiàn)為空說明超出限制,返回空,快指針走k步后快慢指針一起走當(dāng)快指針指向空此時地慢指針就是倒數(shù)第k個節(jié)點(diǎn)。

2.5合并兩個有序鏈表

將兩個升序鏈表合并為一個新的?升序?鏈表并返回。新鏈表是通過拼接給定的兩個鏈表的所有節(jié)點(diǎn)組成的。?

示例 1:

C/C++數(shù)據(jù)結(jié)構(gòu)之鏈表題目答案與解析,數(shù)據(jù)結(jié)構(gòu)初階,數(shù)據(jù)結(jié)構(gòu),c語言

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

示例 2:

輸入:l1 = [], l2 = []
輸出:[]

示例 3:

輸入:l1 = [], l2 = [0]
輸出:[0]

提示:

  • 兩個鏈表的節(jié)點(diǎn)數(shù)目范圍是?[0, 50]
  • -100 <= Node.val <= 100
  • l1?和?l2?均按?非遞減順序?排列
struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2) {
    struct ListNode*phead=(struct ListNode *)malloc(sizeof(struct ListNode));
    struct ListNode*s1=list1,*s2=list2,*cur=phead;
    while(s1&&s2)
    {
        if(s1->val<=s2->val)
        {
            cur->next=s1;
            cur=cur->next;
            s1=s1->next;
            cur->next=NULL;
        }
        else
        {
            cur->next=s2;
            cur=cur->next;
            s2=s2->next;
            cur->next=NULL;
        }
    }
    if(!s1)
    {
        cur->next=s2;
    }
    else{
        cur->next=s1;
    }
    return phead->next;
}

? ? ? ? 在這里我們創(chuàng)建一個頭節(jié)點(diǎn),然后兩個指針指向這兩個鏈表,當(dāng)這兩個指針有一個為空時結(jié)束循環(huán),循環(huán)里就是找到這兩個指針地數(shù)據(jù)哪一個小,去連上頭節(jié)點(diǎn)進(jìn)行尾插,這兩有一個為空時另外一個直接連上。

2.6鏈表分割

現(xiàn)有一鏈表的頭指針 ListNode*?pHead,給一定值x,編寫一段代碼將所有小于x的結(jié)點(diǎn)排在其余結(jié)點(diǎn)之前,且不能改變原來的數(shù)據(jù)順序,返回重新排列后的鏈表的頭指針。

class Partition {
public:
    ListNode* partition(ListNode* pHead, int x) {
        // write code here        
        ListNode *list1=(ListNode*)malloc(sizeof(ListNode));
        ListNode *list2=(ListNode*)malloc(sizeof(ListNode));
        ListNode*s1=list1,*s2=list2;
        list1->next=NULL;
        list2->next=NULL;
        ListNode*p=pHead;
        while(p)
        {
            if(p->val<x)
            {
                s1->next=p;
                p=p->next;
                s1->next=NULL;
            }
            else 
            {
                s2->next=p;
                p=p->next;
                s2->next=NULL;
            }
        }
        s1->next=list2->next;
        free(list2);
    return list1->next;

}

? ? ? ? 我們創(chuàng)建兩個頭節(jié)點(diǎn),然后將小于x的放在一個鏈表上,大于等于X的放在另一個鏈表,最后連起來。

3.結(jié)語

? ? ? ? 數(shù)據(jù)結(jié)構(gòu)的學(xué)習(xí)非常的重要,我們想要學(xué)習(xí)好數(shù)據(jù)結(jié)構(gòu)需要我們多多的刷題,希望大家可以在平時多多刷題來提升自己,最后希望大家可以三連一下文章來源地址http://www.zghlxwxcb.cn/news/detail-754102.html

到了這里,關(guān)于C/C++數(shù)據(jù)結(jié)構(gòu)之鏈表題目答案與解析的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 數(shù)據(jù)結(jié)構(gòu)之鏈表詳解

    數(shù)據(jù)結(jié)構(gòu)之鏈表詳解

    鏈表是一種常見的數(shù)據(jù)結(jié)構(gòu),它可以用來存儲一組數(shù)據(jù),并支持快速的插入和刪除操作。相比于數(shù)組,鏈表的大小可以動態(tài)地增加或減小,因此在某些場景下更加靈活和高效。本文將詳細(xì)介紹鏈表的定義、基本操作和應(yīng)用場景,希望能夠幫助讀者深入理解鏈表的原理和實現(xiàn)。

    2024年02月03日
    瀏覽(22)
  • C++數(shù)據(jù)結(jié)構(gòu)之鏈表(詳解)

    C++數(shù)據(jù)結(jié)構(gòu)之鏈表(詳解)

    主要參考文章地址 01.鏈表基礎(chǔ)知識 | 算法通關(guān)手冊 (itcharge.cn)) 本次內(nèi)容是對鏈表的總結(jié),可以看了上面的文章之后。 在看我下面的內(nèi)容,做一個簡短的復(fù)習(xí),且本內(nèi)容的代碼均用C++實現(xiàn),而參考資料的代碼則為python。 每一個標(biāo)題都有一個完整的鏈接,也可以點(diǎn)擊下面的鏈

    2024年02月15日
    瀏覽(59)
  • C語言數(shù)據(jù)結(jié)構(gòu)之鏈表

    C語言數(shù)據(jù)結(jié)構(gòu)之鏈表

    在上一篇博客中我們提到,線性表包括順序表和鏈表,順序表在上篇博客中已經(jīng)介紹,本篇博客介紹一下另一種線性表—— 鏈表 。 概念:鏈表是?種 物理存儲結(jié)構(gòu)上?連續(xù)、?順序 的存儲結(jié)構(gòu),數(shù)據(jù)元素的 邏輯順序是通過鏈表中的指針鏈接次序?qū)崿F(xiàn)的 。 鏈表的結(jié)構(gòu)跟?

    2024年04月22日
    瀏覽(31)
  • C語言進(jìn)階——數(shù)據(jù)結(jié)構(gòu)之鏈表(續(xù))

    C語言進(jìn)階——數(shù)據(jù)結(jié)構(gòu)之鏈表(續(xù))

    hello,大家好呀,我是Humble,本篇博客承接之前的 C語言進(jìn)階——數(shù)據(jù)結(jié)構(gòu)之鏈表 的內(nèi)容 (沒看過的小伙伴可以從我創(chuàng)建的專欄C語言進(jìn)階之?dāng)?shù)據(jù)結(jié)構(gòu) 找到那篇文章并閱讀后在回來哦~) ,上次我們重點(diǎn)說了鏈表中的 單鏈表 ,即 不帶頭單向不循環(huán)鏈表 還說到了鏈表的分類雖

    2024年01月25日
    瀏覽(22)
  • 【023】C/C++數(shù)據(jù)結(jié)構(gòu)之鏈表及其實戰(zhàn)應(yīng)用

    【023】C/C++數(shù)據(jù)結(jié)構(gòu)之鏈表及其實戰(zhàn)應(yīng)用

    ?? 作者簡介:專注于C/C++高性能程序設(shè)計和開發(fā),理論與代碼實踐結(jié)合,讓世界沒有難學(xué)的技術(shù)。包括C/C++、Linux、MySQL、Redis、TCP/IP、協(xié)程、網(wǎng)絡(luò)編程等。 ?? ??? CSDN實力新星,社區(qū)專家博主 ?? ?? 專欄介紹:從零到c++精通的學(xué)習(xí)之路。內(nèi)容包括C++基礎(chǔ)編程、中級編程、

    2024年02月08日
    瀏覽(27)
  • 數(shù)據(jù)結(jié)構(gòu)之鏈表 - 超詳細(xì)的教程,手把手教你認(rèn)識并運(yùn)用鏈表

    數(shù)據(jù)結(jié)構(gòu)之鏈表 - 超詳細(xì)的教程,手把手教你認(rèn)識并運(yùn)用鏈表

    順序表只適合靜態(tài)的查找和更新,不適合插入和刪除元素, 因為在ArrayList中插入和刪除元素時,由于需要將后序元素往前后者往后移動,所以時間復(fù)雜度會相當(dāng)高,能達(dá)到O(N)。 為了解決這一問題,java 引入了 LinkedList(鏈表)。 鏈表是一種 邏輯上連續(xù),物理上不連續(xù) 的存儲結(jié)

    2024年02月09日
    瀏覽(91)
  • 【數(shù)據(jù)結(jié)構(gòu)】鏈表相關(guān)題目(簡單版)

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

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

    2024年01月19日
    瀏覽(26)
  • 【數(shù)據(jù)結(jié)構(gòu)】鏈表相關(guān)題目(中檔題)

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

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

    2024年01月22日
    瀏覽(17)
  • 數(shù)據(jù)結(jié)構(gòu)——圖解鏈表OJ題目

    數(shù)據(jù)結(jié)構(gòu)——圖解鏈表OJ題目

    ? ? ? ? 學(xué)完了單鏈表之后,我們對其基本結(jié)構(gòu)已經(jīng)有了一定的了解,接下來我們通過一些題目強(qiáng)化對鏈表的理解,同時學(xué)習(xí)一些面試筆試題目的新思路以及加強(qiáng)對數(shù)據(jù)結(jié)構(gòu)單鏈表的掌握。? 目錄 題目一.876. 鏈表的中間結(jié)點(diǎn) - 力扣(LeetCode) 題目二:21. 合并兩個有序鏈表

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

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

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

    2024年03月10日
    瀏覽(93)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包