Leetcode-Sort List

Description

Sort a linked list in O(n log n) time using constant space complexity.

Explain

看題目要求修然,第一個(gè)是鏈表润梯,第二個(gè)是時(shí)間復(fù)雜度為O(n log n)父丰,空間復(fù)雜度為O (1)。排序算法中說到這個(gè)時(shí)間復(fù)雜度的話出牧,肯定也就會(huì)想到快排和歸并排序穴肘。歸并排序如果用數(shù)組實(shí)現(xiàn)的話,是做不到空間復(fù)雜度O(1)的舔痕,但是這剛好是用鏈表來實(shí)現(xiàn)的评抚,所以用歸并排序O(1)可以達(dá)到要求

Code

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* sortList(ListNode* head) {
        if (!head) return head;
        if (!head->next) return head;
        return parti(head);
    }
    
    ListNode* parti(ListNode* cur) {
        if (!cur) return NULL;
        if (!cur->next) return cur;
        int len = 0;
        ListNode* temp = cur;
        while(temp) {
            temp = temp->next;
            len++;
        }
        
        int mid = len / 2;
        int count = 1;
        temp = cur;
        while(count < mid) {
            temp = temp->next;
            count++;
        }
        
        ListNode* next = temp->next;
        temp->next = NULL;
        
        ListNode* one = parti(cur);
        temp = NULL;
        next = parti(next);
        
        while(one || next) {
            if (one && next) {
                
                if (one->val == next->val) {
                    if (!temp) {
                        temp = one;
                        cur = temp;
                    } else {
                        temp->next = one;
                    }
                    ListNode* tmp = one->next;
                    one->next = next;
                    one = tmp;
                    temp = next;
                    next = next->next;
                } else if (one->val > next->val) {
                    if (!temp) {
                        temp = next;
                        cur = temp;
                    } else {
                        temp->next = next;
                        temp = next;
                    }
                    next = next->next;
                } else {
                    if (!temp) {
                        temp = one;
                        cur = temp;
                    } else {
                        temp->next = one;
                        temp = one;
                    }
                    one = one->next;                    
                }
            } else if(one) {
                if (!temp) {
                    cur = one;
                } else {
                    temp->next = one;
                }
                break;
            } else if(next) {
                if (!temp) {
                    cur = next;
                } else {
                    temp->next = next;
                }
                break;                
            } else {
                cur = NULL;
            }
        }
        
        return cur;
    }
};

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末豹缀,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子慨代,更是在濱河造成了極大的恐慌邢笙,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件侍匙,死亡現(xiàn)場(chǎng)離奇詭異氮惯,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)想暗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門妇汗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人说莫,你說我怎么就攤上這事杨箭。” “怎么了唬滑?”我有些...
    開封第一講書人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵告唆,是天一觀的道長棺弊。 經(jīng)常有香客問我晶密,道長,這世上最難降的妖魔是什么模她? 我笑而不...
    開封第一講書人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任稻艰,我火速辦了婚禮,結(jié)果婚禮上侈净,老公的妹妹穿的比我還像新娘尊勿。我一直安慰自己,他們只是感情好畜侦,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開白布元扔。 她就那樣靜靜地躺著,像睡著了一般旋膳。 火紅的嫁衣襯著肌膚如雪澎语。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,741評(píng)論 1 289
  • 那天验懊,我揣著相機(jī)與錄音擅羞,去河邊找鬼。 笑死义图,一個(gè)胖子當(dāng)著我的面吹牛减俏,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播碱工,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼娃承,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼奏夫!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起草慧,我...
    開封第一講書人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤桶蛔,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后漫谷,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體仔雷,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年舔示,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了碟婆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡惕稻,死狀恐怖竖共,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情俺祠,我是刑警寧澤公给,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站蜘渣,受9級(jí)特大地震影響淌铐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蔫缸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一腿准、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧拾碌,春花似錦吐葱、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至防症,卻和暖如春孟辑,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背告希。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來泰國打工扑浸, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人燕偶。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓喝噪,卻偏偏與公主長得像,于是被迫代替她去往敵國和親指么。 傳聞我的和親對(duì)象是個(gè)殘疾皇子酝惧,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • My code: My test result: 這次作業(yè)說實(shí)話不難榴鼎,但是要完全寫出來還是有點(diǎn)細(xì)節(jié)的。首先晚唇,一開始...
    Richardo92閱讀 445評(píng)論 1 1
  • 題目:Sort a linked list in O(nlogn) time using constant spa...
    這是朕的江山閱讀 140評(píng)論 0 0
  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗(yàn)巫财。 張土汪:刷leetcod...
    土汪閱讀 12,737評(píng)論 0 33
  • 一場(chǎng)秋霜 一抹憂傷 作者:張馨之 筆名:馨之 秋風(fēng)總是那么冰涼,冰涼是因?yàn)榉N下了一場(chǎng)秋霜哩陕,這場(chǎng)秋霜的冰涼會(huì)...
    馨之隨筆閱讀 492評(píng)論 0 0
  • 有的時(shí)候平项,欲望像花朵一樣美麗,引誘著你一步步走向深淵悍及。
    眠花城閱讀 380評(píng)論 4 9