LeetCode 148. 排序鏈表

題目

給你鏈表的頭結(jié)點(diǎn) head ,請(qǐng)將其按升序排列并返回排序后的鏈表角骤。

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

方法一:自頂向下歸并排序

sort 函數(shù):不斷將鏈表一分為二

  • head 表示鏈表的頭結(jié)點(diǎn)隅忿,tail 表示鏈表的尾結(jié)點(diǎn)的下一個(gè)結(jié)點(diǎn)
  • 若鏈表無(wú)結(jié)點(diǎn),那么終止本次拆分鏈表
  • 若鏈表只有一個(gè)結(jié)點(diǎn),那么終止本次拆分鏈表背桐,并將該結(jié)點(diǎn)的后繼結(jié)點(diǎn)設(shè)為空
  • slow 和 fast 表示兩個(gè)指針优烧,slow 每次走一步,fast 每次走兩步
  • 循環(huán)直至快指針 fast 等于 tail
    • 快慢指針均后移一步链峭,并判斷快指針此時(shí)是否位于 tail
      • 若并未走至鏈表結(jié)尾畦娄,那么繼續(xù)后移一步
  • mid 表示鏈表的中間結(jié)點(diǎn),根據(jù)上述快慢指針的移動(dòng)熏版,此時(shí)慢指針 slow 即位于中間結(jié)點(diǎn)纷责,賦值
  • 返回兩個(gè)鏈表繼續(xù)拆并分合并后新鏈表

merge 函數(shù):根據(jù)每個(gè)結(jié)點(diǎn)值大小對(duì)兩個(gè)鏈表合并
思路同 21. 合并兩個(gè)有序鏈表

# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution(object):
    def sortList(self, head):
        def sort(head, tail):
            if not head:
                return head
            if head.next == tail:
                head.next = None
                return head
            slow = fast = head
            while fast != tail:
                slow = slow.next
                fast = fast.next
                if fast != tail:
                    fast = fast.next
            mid = slow
            return merge(sort(head, mid), sort(mid, tail))

        def merge(list1, list2):
            result = curr = ListNode()
            while list1 and list2:
                if list1.val <= list2.val:
                    curr.next = ListNode(list1.val)
                    list1 = list1.next
                else:
                    curr.next = ListNode(list2.val)
                    list2 = list2.next
                curr = curr.next
            if list1:
                curr.next = list1
            else:
                curr.next = list2
            return result.next

        return sort(head, None)


時(shí)間復(fù)雜度:O(nlogn)
空間復(fù)雜度:O(logn)

相關(guān)知識(shí)
  • 歸并排序:
參考

代碼相關(guān):https://leetcode.cn/problems/sort-list/solution/pai-xu-lian-biao-by-leetcode-solution/
歸并排序:https://www.cnblogs.com/chengxiao/p/6194356.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市撼短,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌挺勿,老刑警劉巖曲横,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件底洗,死亡現(xiàn)場(chǎng)離奇詭異搬俊,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)馅闽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門蚊丐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)熙参,“玉大人,你說(shuō)我怎么就攤上這事麦备∧跻” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵凛篙,是天一觀的道長(zhǎng)黍匾。 經(jīng)常有香客問(wèn)我,道長(zhǎng)呛梆,這世上最難降的妖魔是什么锐涯? 我笑而不...
    開(kāi)封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮填物,結(jié)果婚禮上纹腌,老公的妹妹穿的比我還像新娘。我一直安慰自己滞磺,他們只是感情好升薯,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著雁刷,像睡著了一般覆劈。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天责语,我揣著相機(jī)與錄音炮障,去河邊找鬼。 笑死坤候,一個(gè)胖子當(dāng)著我的面吹牛胁赢,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播白筹,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼智末,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了徒河?” 一聲冷哼從身側(cè)響起系馆,我...
    開(kāi)封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎顽照,沒(méi)想到半個(gè)月后由蘑,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡代兵,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年尼酿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片植影。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡裳擎,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出思币,到底是詐尸還是另有隱情鹿响,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布支救,位于F島的核電站抢野,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏各墨。R本人自食惡果不足惜指孤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望贬堵。 院中可真熱鬧恃轩,春花似錦、人聲如沸黎做。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蒸殿。三九已至筷厘,卻和暖如春鸣峭,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背酥艳。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工摊溶, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人充石。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓莫换,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親骤铃。 傳聞我的和親對(duì)象是個(gè)殘疾皇子拉岁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

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