148 排序鍊錶 中等 鍊錶 歸併排序

2021-10-10 17:21:40 字數 1215 閱讀 2336

給你鍊錶的頭結點head,請將其按 公升序 排列並返回 排序後的鍊錶 。

高階:你可以在o(n log n)時間複雜度和常數級空間複雜度下,對鍊錶進行排序嗎?

示例 1:

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

輸出:[1,2,3,4]

示例 2:

輸入:head = [-1,5,3,4,0]

輸出:[-1,0,3,4,5]

示例 3:

輸入:head = 

輸出:

鍊錶的歸併排序,使用了遞迴方法,希望再碰到鍊錶的歸併問題能做出來

/**

* definition for singly-linked list.

* public class listnode

* listnode(int val)

* listnode(int val, listnode next)

* }*/class

solution

public listnode sortlist

(listnode head, listnode tail)

// 非常關鍵的一步,切割鍊錶

if(head.next == tail)

// 使用雙指標切割鍊錶,乙個一次走一步,乙個走兩步

listnode t1 = head, t2 = head;

while

(t2 != tail)

}// 預設tail不算節點,也不參與

listnode l1 =

sortlist

(head, t1)

; listnode l2 =

sortlist

(t1, tail)

;// 合併兩個有序鍊錶

return

merge

(l1, l2);}

public listnode merge

(listnode l1, listnode l2)

else

t = t.next;}if

(t1 != null)

if(t2 != null)

return dummyhead.next;

}}

148 排序鍊錶 歸併排序

難度 中等 題目描述 解題思路 148.排序鍊錶 2020 8 13 1對鍊錶進行歸併排序 1 快慢指標找中間節點 2 遞迴呼叫mergesort 3 合併有序鍊錶 public listnode sortlist listnode head public listnode listmergesor...

148 排序鍊錶 歸併排序 快速排序

在 o n log n 時間複雜度和常數級空間複雜度下,對鍊錶進行排序。輸入 4 2 1 3輸出 1 2 3 4 歸併排序法 利用快慢指標將鍊錶分為前後半段 先對slow.next找到後半段並進行排序 斷開鍊錶前後半段,對前半段進行排序 合併排序完成後的左右兩條鍊錶 function mergetw...

leetcode 148 排序鍊錶 歸併排序

在 o n log n 時間複雜度和常數級空間複雜度下,對鍊錶進行排序。示例 1 輸入 4 2 1 3輸出 1 2 3 4示例 2 輸入 1 5 3 4 0輸出 1 0 3 4 5 思路 看到o n log n 首先想到的是遞迴,排序中的歸併遞迴排序滿足這個時間複雜度 難點一 找到乙個連表的中間節點...