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

【數據結構】“單鏈表”的練習題

這篇具有很好參考價值的文章主要介紹了【數據結構】“單鏈表”的練習題。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

【數據結構】“單鏈表”的練習題,數據結構與算法,數據結構,算法,鏈表,c語言

?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???? ?? ??
??個人主頁 :阿然成長日記 ??點擊可跳轉
?? 個人專欄: ??數據結構與算法??C語言進階
?? 不能則學,不知則問,恥于問人,決無長進
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??

876.鏈表的中間節(jié)點

題目要求:

給你單鏈表的頭結點 head ,請你找出并返回鏈表的中間結點。 如果有兩個中間結點,則返回第二個中間結點。
示例 1:

【數據結構】“單鏈表”的練習題,數據結構與算法,數據結構,算法,鏈表,c語言

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

示例 2:
【數據結構】“單鏈表”的練習題,數據結構與算法,數據結構,算法,鏈表,c語言

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

思路:
1.定義快指針和慢指針
2.快指針一次走兩步,慢指針一次走一步,
3.快指針走到鏈表最后時,快指針所走的距離正好是慢指針的二倍。

【數據結構】“單鏈表”的練習題,數據結構與算法,數據結構,算法,鏈表,c語言

代碼實現:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */


struct ListNode* middleNode(struct ListNode* head)
{
    struct ListNode* low = head;
    struct ListNode* fast = head;

    while(fast && fast->next)
    {
        low = low->next;
        fast = fast->next->next;
    }
    return low;
}

203.移除鏈表元素

題目要求:

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

示例 1:
【數據結構】“單鏈表”的練習題,數據結構與算法,數據結構,算法,鏈表,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 輸出:[]

思路:
1.如果第一個節(jié)點就是要刪除的。進行頭刪
2.如果head一開始就是空,或者,進行N次頭刪之后,為空。就返回head
3.中間的節(jié)點正常刪除。尾刪與之一樣。

【數據結構】“單鏈表”的練習題,數據結構與算法,數據結構,算法,鏈表,c語言

代碼:文章來源地址http://www.zghlxwxcb.cn/news/detail-624301.html

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */


struct ListNode* removeElements(struct ListNode* head, int val)
{  	   
        while(head && head->val == val) 
        head = head->next;   //排除第一個節(jié)點就相等的情況
        
        if(!head) //如果刪除第一個,判斷是否就空了
        return head; 

        struct ListNode* slow = head;     //定義快慢指針,也要寫在上一步之后
        struct  ListNode* fast = head->next;

        while(fast) {
            if(fast->val==val) {        //遇到相等就刪除
                slow->next = fast->next;
                fast = slow->next;
            }  else {                   //否則快慢指針依次后移
                slow = slow->next;
                fast = fast->next;
            }
        }
        return head;
    
}

【數據結構】“單鏈表”的練習題,數據結構與算法,數據結構,算法,鏈表,c語言

??皖}—鏈表中倒數第k個結點

題目要求:
輸入一個鏈表,輸出該鏈表中倒數第k個結點。
示例1

輸入: 1,{1,2,3,4,5}
返回值: {5}

思路分析:
【數據結構】“單鏈表”的練習題,數據結構與算法,數據結構,算法,鏈表,c語言
注意點:考慮鏈表為空的情況,K的值大于鏈表的長度。

代碼:.

struct ListNode* FindKthToTail(struct ListNode* pListHead, int k ) {

    // write code here

    struct ListNode* fast = pListHead;

    struct ListNode* low = pListHead;



    int i = k-1;

//判斷是否為空,或這k有問題

    if(pListHead==NULL||k<=0)

        return NULL;



    while(i--)

    {

        if(fast->next==NULL)

        {

            return NULL;

        }

        fast = fast->next;

    }

//兩個指針開始同時移動,到最后low表示倒數k的節(jié)點    

    while(fast->next)

    {

        low = low->next;

        fast = fast->next;

    }

    return low;

}

答案正確!
注意:在測試樣例中我發(fā)現個問題。
【數據結構】“單鏈表”的練習題,數據結構與算法,數據結構,算法,鏈表,c語言
倒數第五個不應該是1嗎?
原因是,fast后移k-1個,此時fast指針已經指向最后一個元素(fast->next==NULL),所以,根本就沒有進行while循環(huán),兩個指針同步移動中去。又因為我們最開始給 low= =plisthead,所以,此時返回的是整個鏈表。

反轉鏈表

頭插法:
思路:
【數據結構】“單鏈表”的練習題,數據結構與算法,數據結構,算法,鏈表,c語言

從頭開始取鏈表的每一個節(jié)點插入到newnode之前

struct ListNode* reverseList(struct ListNode* head){
    struct ListNode* cur = head;
    struct ListNode* newnode = NULL;
    //頭插
    while(cur)
    {
        //定義一個之指針用來保存下一個節(jié)點
        struct ListNode* tmp = cur->next;
        cur->next = newnode;//頭插
        newnode = cur;//將newnode指針前移

        cur = tmp;
    }
    return newnode;
}

【數據結構】“單鏈表”的練習題,數據結構與算法,數據結構,算法,鏈表,c語言

cm11-鏈表分割

描述
現有一鏈表的頭指針 ListNode* pHead,給一定值x,編寫一段代碼將所有小于x的結點排在其余結點之前,且不能改變原來的數據順序,返回重新排列后的鏈表的頭指針。
思路:
【數據結構】“單鏈表”的練習題,數據結構與算法,數據結構,算法,鏈表,c語言

代碼:

class Partition {
public:
    ListNode* partition(ListNode* pHead, int x) {
        // write code here
        struct ListNode* ghead,* gtail,* lhead,* ltail;

        lhead = ltail = (struct ListNode*)malloc(sizeof(struct ListNode));
        ghead = gtail = (struct ListNode*)malloc(sizeof(struct ListNode));
        struct ListNode* cur = pHead;
        //遍歷鏈表,大于等于x的放ghead鏈表中,小于x的放lhead鏈表
        while(cur)
        {
            if(cur->val >= x)
            {
                gtail->next = cur;//尾插
                gtail = gtail->next;//移向下一位
            }
            else 
            {
                ltail->next = cur;//尾插
                ltail = ltail->next;
               
            }
            cur = cur->next;
        }
        ltail->next = ghead->next;
        gtail->next = NULL;
        struct ListNode* head = lhead->next;
        free(lhead);
        free(ghead);
        return head;
    }
};

到了這里,關于【數據結構】“單鏈表”的練習題的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

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

領支付寶紅包贊助服務器費用

相關文章

  • 【數據結構】算法的時間復雜度和空間復雜度(下)(附leetcode練習題)

    【數據結構】算法的時間復雜度和空間復雜度(下)(附leetcode練習題)

    ??個人主頁:fighting小澤 ??作者簡介:目前正在學習C語言和數據結構 ??博客專欄:數據結構 ???歡迎關注:評論????點贊????留言???? 空間復雜度也是一個數學表達式,是對一個算法在運行過程中 臨時占用的額外的存儲空間大小的量度 。 空間復雜度不是程序占用

    2023年04月19日
    瀏覽(21)
  • 【數據結構】 算法的時間復雜度和空間復雜度 (上)(附leetcode練習題)

    【數據結構】 算法的時間復雜度和空間復雜度 (上)(附leetcode練習題)

    ??個人主頁:fighting小澤 ??作者簡介:目前正在學習C語言和數據結構 ??博客專欄:數據結構 ???歡迎關注:評論????點贊????留言???? 如何衡量一個算法的好壞呢?比如對于以下斐波那契數列: 斐波那契數列的遞歸實現方式非常簡潔,但簡潔一定好嗎?那該如何

    2023年04月14日
    瀏覽(26)
  • 【數據結構】算法的時間復雜度和空間復雜度 (上)(附leetcode練習題)

    【數據結構】算法的時間復雜度和空間復雜度 (上)(附leetcode練習題)

    ??個人主頁:fighting小澤 ??作者簡介:目前正在學習C語言和數據結構 ??博客專欄:數據結構 ???歡迎關注:評論????點贊????留言???? 如何衡量一個算法的好壞呢?比如對于以下斐波那契數列: 斐波那契數列的遞歸實現方式非常簡潔,但簡潔一定好嗎?那該如何

    2023年04月22日
    瀏覽(21)
  • 數據結構——二叉樹練習題

    數據結構——二叉樹練習題

    目錄 單值二叉樹? 相同的樹? 另一棵樹的子樹 二叉樹的前序遍歷 ?二叉樹的構造及遍歷 給大家推薦一款刷題,找工作的好網站——牛客網 ??途W - 找工作神器|筆試題庫|面試經驗|實習招聘內推,求職就業(yè)一站解決_??途W ? 思路:根節(jié)點跟左子樹比較,若相等則繼續(xù)比,一

    2024年02月11日
    瀏覽(23)
  • 【數據結構】第二章課后練習題——線性結構

    【數據結構】第二章課后練習題——線性結構

    1、線性表是 一個有限序列,可以為空 2、鏈表中最常用的操作是在最后一個元素之后插入一個元素和刪除最后一個元素,則采用 單循環(huán)鏈表 存儲方式最節(jié)省運算時間 3、若某線性表中最常用的操作實在最后一個元素之后插入一個元素和刪除第一個元素,則采用 僅有尾結點的

    2024年02月07日
    瀏覽(25)
  • 力扣(LeetCode)數據結構練習題(2)

    力扣(LeetCode)數據結構練習題(2)

    今天又寫了兩道關于鏈表的練習題,來給大家分享一下。鞏固一下上一篇學到的鏈表知識,題目可以然我們更清楚的認識鏈表。 目錄 給你單鏈表的頭節(jié)點?head?,請你反轉鏈表,并返回反轉后的鏈表 給你單鏈表的頭結點?head?,請你找出并返回鏈表的中間結點。如果有兩個中

    2024年02月21日
    瀏覽(27)
  • 【數據結構(四)】鏈表經典練習題

    【數據結構(四)】鏈表經典練習題

    ?博主主頁: 33的博客? ??文章專欄分類:數據結構?? ??我的代碼倉庫: 33的代碼倉庫?? ?????? 關注我?guī)銓W更多數據結構知識 在上一篇文章中博主已經介紹了鏈表的基礎知識,什么是鏈表,如何實現一個鏈表,以及LinkedList的操作方法,那么在這篇文章中通過一些鏈

    2024年04月22日
    瀏覽(24)
  • 【數據結構】時間復雜度---OJ練習題

    【數據結構】時間復雜度---OJ練習題

    目錄 ??時間復雜度練習 ??面試題---消失的數字 題目描述 題目鏈接:面試題 17.04. 消失的數字 ??解題思路 ??思路1: malloc函數用法? ??思路2: ??思路3: ???如果有不了解時間復雜度的請移步上一篇文章:【數據結構】初識 題目描述 數組 nums 包含從 0 到 n 的所有整數,

    2024年02月16日
    瀏覽(24)
  • 【數據結構】順序表詳解(附leetcode練習題)

    【數據結構】順序表詳解(附leetcode練習題)

    ??個人主頁:fighting小澤 ??作者簡介:目前正在學習C語言和數據結構 ??博客專欄:數據結構 ???歡迎關注:評論????點贊????留言???? 線性表(linear list)是n個具有相同特性的數據元素的有限序列。 線性表是一種在實際中廣泛使用的數據結構,常見的線性表:順

    2023年04月27日
    瀏覽(23)
  • 數據結構之鏈表練習與習題詳細解析

    數據結構之鏈表練習與習題詳細解析

    個人主頁:點我進入主頁 專欄分類:C語言初階? ? ??C語言程序設計————KTV? ? ? ?C語言小游戲? ? ?C語言進階 C語言刷題? ? ? ?數據結構初階 歡迎大家點贊,評論,收藏。 一起努力,一起奔赴大廠。 目錄 1.前言 2.習題解析 2.1習題一 2.2習題二 2.3習題三 2.4習題四 2.

    2024年02月05日
    瀏覽(29)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領取紅包

二維碼2

領紅包