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

LeetCode刷題之分隔鏈表(圖解?代碼)

這篇具有很好參考價值的文章主要介紹了LeetCode刷題之分隔鏈表(圖解?代碼)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

? ? ? ? 首先直接進(jìn)入主題,題目鏈接??力扣(LeetCode)官網(wǎng) - 全球極客摯愛的技術(shù)成長平臺

源代碼在最后,有更優(yōu)解的朋友歡迎在評論里指導(dǎo)我一番!

1.題目分析

LeetCode刷題之分隔鏈表(圖解?代碼),LeetCode刷題(分析?源代碼),leetcode,鏈表,算法

通過題目分析得出結(jié)論:

? ? ? ? 1. 將鏈表分為k個子鏈表

? ? ? ? 2. 用一個數(shù)組存放這k個子鏈表,數(shù)組的長度就是k

? ? ? ? 3. 任意兩個子鏈表的長度差不能超過1,也就是要么子鏈表長度都是2或者別的數(shù)字,要么子鏈表之間可以是2,2,2,1或者3,3,2等。子鏈表的長度跟鏈表的長度和k有關(guān)。

? ? ? ? 4. 子鏈表存放到數(shù)組的順序不能改變,也就是說鏈表是從頭開始分隔的,依次再存放到數(shù)組里。

? ? ? ? 5. 既然數(shù)組是存放子鏈表的,那準(zhǔn)確來說數(shù)組元素是鏈表某一節(jié)點的地址,之后通過這個節(jié)點能找到后面的節(jié)點,直到每個子鏈表的節(jié)點到NULL的時候。

我們用圖解來展示一下:

? ? ? ? 我們?yōu)榱烁蜗蟮恼宫F(xiàn)數(shù)組里的元素,直接把子鏈表放入,但我們要知道存放的其實是每個子鏈表的頭節(jié)點的地址!

LeetCode刷題之分隔鏈表(圖解?代碼),LeetCode刷題(分析?源代碼),leetcode,鏈表,算法

知道這樣之后,我們直接上代碼,代碼里有詳細(xì)介紹!文章來源地址http://www.zghlxwxcb.cn/news/detail-739518.html

2.源代碼

struct ListNode** Create(int k,int* returnSize)
{
    *returnSize = k;
    struct ListNode** output = (struct ListNode**)malloc(sizeof(struct ListNode*) * k);
    if(output == NULL)
    {
        perror("malloc fail");
        exit(-1);
    }
    //注意?。。。。?!1
    //這里不初始化會報錯的,因為我們這個指針數(shù)組存的是指針,必須初始化為空,否則都是野指針
    //你想想一個指針數(shù)組存放的都是野指針,沒有任何意義!
    for(int i = 0; i < k; i++)
    {
        output[i] = NULL;
    }
    return output;
}
struct ListNode** splitListToParts(struct ListNode* head, int k, int* returnSize)
{
    //我們要知道這個題返回的是什么,本題返回的是一個二級指針,也就是存放一級指針的地址,所以在這里開辟的數(shù)組
    //應(yīng)該是存放的是鏈表節(jié)點的地址
    //我們清楚返回值之后就寫題吧

    //創(chuàng)建一個指針數(shù)組output,用來存放鏈表節(jié)點的地址
    struct ListNode** output = Create(k,returnSize);

    //鏈表為空的時候,這個數(shù)組都是空指針,因為我們初始化為空了,所以直接返回就可以了。
    if(head == NULL)
        return output;

    //鏈表不為空的時候
    //我們先求鏈表長度,看分隔的段數(shù)是否大于鏈表長度
    struct ListNode* cur = head;
    int len = 0;
    while(cur)
    {
        len++;
        cur = cur->next;
    }
    //當(dāng)鏈表長度小于要分隔的段數(shù)時,很明顯鏈表的節(jié)點是不夠用的
    //當(dāng)添加完節(jié)點之后,剩下的用空指針補齊,我們上面初始化了已經(jīng),所以不需要對空指針這里做代碼
    if(len < k)
    {
        cur = head;
        int i = 0;
        while(cur)
        {
            struct ListNode* next = cur->next;
            output[i] = cur;
            cur->next = NULL;
            cur = next;
            i++;
        }
    }
    //當(dāng)鏈表長度大于分隔的段數(shù)k
    //我們這里就要注意一點,任意兩部分長度的差距不能超過一
    else
    {
        //這里我們通過n來知道分k段,剩了幾個節(jié)點
        int n = len % k;
        //通過m知道,最開始一段分幾個節(jié)點。
        int m = len / k;
        int i = 0;
        cur = head;
        //任意兩個部分的長度差距不超過一,那么我們就讓第一部分加1,第二部分加1,依次加一,但是加幾個呢?
        //看n是幾,就加幾次
        while(n--)
        {
            m = len / k;
            output[i] = cur;
            while(m)
            {
                cur = cur->next;
                m--;
            }
            struct ListNode* next = cur->next;
            cur->next = NULL;
            cur = next;
            i++;
        }
        //在分配完剩余節(jié)點個數(shù)之后,就正常的一段應(yīng)該是幾個節(jié)點
        //這里的條件就是下標(biāo)i小于數(shù)組元素個數(shù)
        while(i < k)
        {
            m = len / k - 1;
            output[i] = cur;
            while(m)
            {
                 cur = cur->next;
                m--;
            }
            struct ListNode* next = cur->next;
            cur->next = NULL;
            cur = next;
            i++;
        }
    }
    //最后返回output
    return output;
}

到了這里,關(guān)于LeetCode刷題之分隔鏈表(圖解?代碼)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • Leetcode刷題之兩兩交換鏈表中的結(jié)點和相交鏈表

    Leetcode刷題之兩兩交換鏈表中的結(jié)點和相交鏈表

    只有把抱怨環(huán)境的心情,化為上進(jìn)的力量,才是成功的保證。? ? ? ?——羅曼·羅蘭 目錄 ??一.相交鏈表 ??1.雙指針 ??2.計算長度加雙指針 ??二.兩兩交換鏈表中的結(jié)點? ??1.迭代? 給你兩個單鏈表的頭節(jié)點? headA ?和? headB ?,請你找出并返回兩個單鏈表相交的起始節(jié)點

    2024年02月04日
    瀏覽(23)
  • Leetcode刷題之回文鏈表和交換鏈表中的結(jié)點

    Leetcode刷題之回文鏈表和交換鏈表中的結(jié)點

    竭力履行你的義務(wù),你應(yīng)該就會知道,你到底有多大的價值。? ? ? --列夫.托爾斯泰 目錄 ??一.回文鏈表 ??1.快慢指針? ??2.把值存入數(shù)組中,然后使用雙指針? ??二.交換鏈表中的結(jié)點? ??1.快慢指針 給你一個單鏈表的頭節(jié)點? head ?,請你判斷該鏈表是否為回文鏈表。如

    2024年02月04日
    瀏覽(21)
  • 【算法刷題之鏈表篇(1)】

    【算法刷題之鏈表篇(1)】

    給定一個已排序的鏈表的頭 head , 刪除原始鏈表中所有重復(fù)數(shù)字的節(jié)點,只留下不同的數(shù)字 。返回 已排序的鏈表 。 1.我們從指針 prev 指向鏈表的啞節(jié)點,隨后開始對鏈表進(jìn)行遍歷。 2.如果當(dāng)前 cur與 cur.next對應(yīng)的元素相同,那么我們就需要將 cur 以及所有后面擁有相同元素值

    2024年02月12日
    瀏覽(50)
  • 【算法刷題之鏈表篇(2)】

    【算法刷題之鏈表篇(2)】

    給你一個鏈表數(shù)組,每個鏈表都已經(jīng)按升序排列。 請你將所有鏈表合并到一個升序鏈表中,返回合并后的鏈表。 思路 : 首先寫出合并兩個鏈表的代碼 : 1.定義兩個指針分別位于兩個鏈表的頭處,再定義一個哨兵位用于接受元素; 2.兩個鏈表頭處的指針開始遍歷,并且相互

    2024年02月11日
    瀏覽(41)
  • LeetCode - #86 分隔鏈表

    LeetCode - #86 分隔鏈表

    我們社區(qū)陸續(xù)會將顧毅( Netflix 增長黑客,《iOS 面試之道》作者,ACE 職業(yè)健身教練。 )的 Swift 算法題題解整理為文字版以方便大家學(xué)習(xí)與閱讀。 LeetCode 算法到目前我們已經(jīng)更新了 83 期,我們會保持更新時間和進(jìn)度( 周一、周三、周五早上 9:00 發(fā)布 ),每期的內(nèi)容不多,

    2024年02月10日
    瀏覽(15)
  • 【LeetCode力扣】86. 分隔鏈表

    【LeetCode力扣】86. 分隔鏈表

    ? 目錄 1、題目介紹 2、解題思路 2.1、雙鏈表雙指針 2.2、代碼描述 ? 原題鏈接: 86. 分隔鏈表 - 力扣(LeetCode) ? 示例 1: 輸入: head = [1,4,3,2,5,2], x = 3 輸出: [1,2,2,4,3,5] ? 示例 2: 輸入: head = [2,1], x = 2 輸出: [1,2] ? 提示: 鏈表中節(jié)點的數(shù)目在范圍 [0, 200] 內(nèi) -100 = Node.val

    2024年02月08日
    瀏覽(14)
  • 刷題之Leetcode209題(超級詳細(xì))

    力扣題目鏈接(opens new window) https://leetcode.cn/problems/minimum-size-subarray-sum/ 給定一個含有?n?個正整數(shù)的數(shù)組和一個正整數(shù)?s ,找出該數(shù)組中滿足其和 ≥ s 的長度最小的 連續(xù) 子數(shù)組,并返回其長度。如果不存在符合條件的子數(shù)組,返回 0。 示例: 輸入:s = 7, nums = [2,3,1,2,4,3] 輸

    2024年04月11日
    瀏覽(17)
  • Leetcode刷題之有效的括號

    Leetcode刷題之有效的括號

    我們的內(nèi)心和心智,是決定我們未來命運的最強(qiáng)勁的力量。? ? ? ? ?-- 奧普拉·溫弗瑞 目錄 ??一.有效的括號 ??1.使用棧實現(xiàn) ??2.完整代碼: 題目描述: 給定一個只包括 \\\'(\\\',\\\')\\\',\\\'{\\\',\\\'}\\\',\\\'[\\\',\\\']\\\'?的字符串 s ,判斷字符串是否有效。 有效字符串需滿足: 1.左括號必須用相

    2024年02月05日
    瀏覽(25)
  • (鏈表專題) 725. 分隔鏈表 ——【Leetcode每日一題】

    (鏈表專題) 725. 分隔鏈表 ——【Leetcode每日一題】

    給你一個頭結(jié)點為 head 的單鏈表和一個整數(shù) k ,請你設(shè)計一個算法將鏈表分隔為 k 個連續(xù)的部分。 每部分的長度應(yīng)該盡可能的相等:任意兩部分的長度差距不能超過 1 。這可能會導(dǎo)致有些部分為 null 。 這 k 個部分應(yīng)該按照在鏈表中出現(xiàn)的順序排列,并且排在前面的部分的長

    2023年04月17日
    瀏覽(18)
  • leetcode刷題之背包問題(01背包)

    leetcode刷題之背包問題(01背包)

    01 背包 概念:有n件物品和一個最多能背重量為w 的背包。第i件物品的重量是 w e i g h t [ i ] weight[i] w e i g h t [ i ] ,得到的價值是 v a l u e [ i ] value[i] v a l u e [ i ] 。每件物品只能用一次,求解將哪些物品裝入背包里物品價值總和最大。 方法1:暴力回溯法 方法2:動態(tài)規(guī)劃 三個

    2024年02月02日
    瀏覽(153)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包