欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++實現(xiàn)LeetCode(86.劃分鏈表)

 更新時間:2021年07月17日 16:54:27   作者:Grandyang  
這篇文章主要介紹了C++實現(xiàn)LeetCode(86.劃分鏈表),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下

[LeetCode] 86.Partition List 劃分鏈表

Given a linked list and a value x, partition it such that all nodes less than x come before nodes greater than or equal to x.

You should preserve the original relative order of the nodes in each of the two partitions.

For example,
Given 1->4->3->2->5->2 and x = 3,
return 1->2->2->4->3->5.

這道題要求我們劃分鏈表,把所有小于給定值的節(jié)點都移到前面,大于該值的節(jié)點順序不變,相當(dāng)于一個局部排序的問題。那么可以想到的一種解法是首先找到第一個大于或等于給定值的節(jié)點,用題目中給的例子來說就是先找到4,然后再找小于3的值,每找到一個就將其取出置于4之前即可,代碼如下:

解法一

class Solution {
public:
    ListNode *partition(ListNode *head, int x) {
        ListNode *dummy = new ListNode(-1);
        dummy->next = head;
        ListNode *pre = dummy, *cur = head;;
        while (pre->next && pre->next->val < x) pre = pre->next;
        cur = pre;
        while (cur->next) {
            if (cur->next->val < x) {
                ListNode *tmp = cur->next;
                cur->next = tmp->next;
                tmp->next = pre->next;
                pre->next = tmp;
                pre = pre->next;
            } else {
                cur = cur->next;
            }
        }
        return dummy->next;
    }
};

這種解法的鏈表變化順序為:

1 -> 4 -> 3 -> 2 -> 5 -> 2 

1 -> 2 -> 4 -> 3 -> 5 -> 2 

1 -> 2 -> 2 -> 4 -> 3 -> 5

此題還有一種解法,就是將所有小于給定值的節(jié)點取出組成一個新的鏈表,此時原鏈表中剩余的節(jié)點的值都大于或等于給定值,只要將原鏈表直接接在新鏈表后即可,代碼如下:

解法二

class Solution {
public:
    ListNode *partition(ListNode *head, int x) {
        if (!head) return head;
        ListNode *dummy = new ListNode(-1);
        ListNode *newDummy = new ListNode(-1);
        dummy->next = head;
        ListNode *cur = dummy, *p = newDummy;
        while (cur->next) {
            if (cur->next->val < x) {
                p->next = cur->next;
                p = p->next;
                cur->next = cur->next->next;
                p->next = NULL;
            } else {
                cur = cur->next;
            }
        }
        p->next = dummy->next;
        return newDummy->next;
    }
};

此種解法鏈表變化順序為:

Original: 1 -> 4 -> 3 -> 2 -> 5 -> 2 

New:

Original: 4 -> 3 -> 2 -> 5 -> 2 

New:   1

Original: 4 -> 3 -> 5 -> 2 

New:   1 -> 2

Original: 4 -> 3 -> 5 

New:   1 -> 2 -> 2

Original: 

New:   1 -> 2 -> 2 -> 4 -> 3 -> 5 

到此這篇關(guān)于C++實現(xiàn)LeetCode(86.劃分鏈表)的文章就介紹到這了,更多相關(guān)C++實現(xiàn)劃分鏈表內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言詳細分析浮點數(shù)在內(nèi)存中的儲存

    C語言詳細分析浮點數(shù)在內(nèi)存中的儲存

    我們在日常生活中和編程中都會用到小數(shù),比如:3.1415926、29.9、1E10(科學(xué)計數(shù)法也是浮點型)。在C語言中的浮點型類型有:float,double,long double。那么浮點數(shù)在這些浮點型的內(nèi)存之中又是如何儲存的呢,這就是今天我們要分享的
    2022-06-06
  • 關(guān)于C語言位運算的簡單示例

    關(guān)于C語言位運算的簡單示例

    這篇文章主要介紹了關(guān)于C語言位運算的簡單示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • 淺談帶緩沖I/O 和不帶緩沖I/O的區(qū)別與聯(lián)系

    淺談帶緩沖I/O 和不帶緩沖I/O的區(qū)別與聯(lián)系

    下面小編就為大家?guī)硪黄獪\談帶緩沖I/O 和不帶緩沖I/O的區(qū)別與聯(lián)系。小編覺得挺不錯的現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • Effective?C++?學(xué)習(xí)筆記

    Effective?C++?學(xué)習(xí)筆記

    這篇文章主要介紹了Effective?C++?學(xué)習(xí)筆記,想學(xué)習(xí)Effective?C++的朋友可以參考一下
    2023-08-08
  • 利用Matlab復(fù)刻羊了個羊小游戲

    利用Matlab復(fù)刻羊了個羊小游戲

    最近羊了個羊游戲可謂是異?;鸨?,身邊幾乎都在玩,他其實就是一個簡單的卡通背景消除闖關(guān)游戲,本文將用Matlab復(fù)刻這一游戲,感興趣的可以了解一下
    2022-09-09
  • C++實現(xiàn)產(chǎn)生隨機數(shù)和相應(yīng)的猜拳小游戲?qū)嵗a

    C++實現(xiàn)產(chǎn)生隨機數(shù)和相應(yīng)的猜拳小游戲?qū)嵗a

    C++中沒有自帶的random函數(shù),要實現(xiàn)隨機數(shù)的生成就需要使用rand()和srand()。下面這篇文章主要給大家介紹了關(guān)于C++實現(xiàn)產(chǎn)生隨機數(shù)和相應(yīng)的猜拳小游戲的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2018-09-09
  • C語言動態(tài)內(nèi)存分配的詳解

    C語言動態(tài)內(nèi)存分配的詳解

    這篇文章主要介紹了C語言動態(tài)內(nèi)存分配的詳解的相關(guān)資料,這里提供了實現(xiàn)方法整理和出現(xiàn)錯誤的解決辦法,需要的朋友可以參考下
    2017-07-07
  • Qt實現(xiàn)簡易計時器的示例代碼

    Qt實現(xiàn)簡易計時器的示例代碼

    計時器實現(xiàn)四個功能:開始計時、停止計時、暫停計時以及打點。當(dāng)點擊暫停時,開始按鈕和停止按鈕無法點擊。當(dāng)點擊停止時,開始按鈕和暫停按鈕無法點擊,此時停止按鈕變?yōu)榍辶恪1疚膶⒂肣t實現(xiàn)這樣的一個計時器,需要的可以參考一下
    2022-06-06
  • 淺談C語言結(jié)構(gòu)體

    淺談C語言結(jié)構(gòu)體

    本文主要介紹C語言 結(jié)構(gòu)體的知識,學(xué)習(xí)C語言肯定需要學(xué)習(xí)結(jié)構(gòu)體,這里詳細說明了結(jié)構(gòu)體并附示例代碼,供大家參考學(xué)習(xí),有需要的小伙伴可以參考下
    2021-10-10
  • C++標(biāo)準庫中sstream與strstream的區(qū)別詳細解析

    C++標(biāo)準庫中sstream與strstream的區(qū)別詳細解析

    以下是對C++標(biāo)準庫中sstream與strstream的區(qū)別進行了詳細的分析介紹,需要的朋友可以過來參考下
    2013-09-09

最新評論