時間複雜度:o(nlog(n))
空間複雜度:由於使用了遞迴,o(log(n))
class
solution
else
if(head-
>next==
nullptr
) listnode* fast=head;
listnode* slow=head;
while
(fast-
>next!=
nullptr
&&fast-
>next-
>next!=
nullptr
) listnode* pre=slow;
slow=slow-
>next;
//右邊鍊錶起始
pre-
>next=
nullptr
;//左右兩個鍊錶截斷
listnode* l=
sortlist
(head)
; listnode* r=
sortlist
(slow)
;return
merge
(l,r);}
private
: listnode*
merge
(listnode* l, listnode* r)
else
//合併鍊錶
listnode* tmp=res;
while
(l!=
nullptr
&&r!=
nullptr
)else
tmp=tmp-
>next;
}//確保兩個列表剩餘的連線
if(l!=
nullptr
)else
return res;}}
;
畫圖有助於理解鍊錶的前進與交換問題
/**
* definition for singly-linked list.
* struct listnode
* };
*/class
solution
//快速排序
void
quicksort
(listnode* left, listnode* right)
p = p-
>next;
//更新}if
(cur!=right)
quicksort
(left,pre)
;quicksort
(cur,right);}
listnode*
sortlist
(listnode* head)
quicksort
(head, tail)
;return head;}}
;
鍊錶 排序鍊錶
樂扣原題 definition for singly linked list.public class listnode class solution 將鍊錶轉化為陣列 listlist new arraylist while null head 陣列遞增排序 collections.sort li...
鍊錶 鍊錶排序 中等
描述 在 o n log n 時間複雜度和常數級的空間複雜度下給鍊錶排序。您在真實的面試中是否遇到過這個題?樣例給出 1 3 2 null,給它排序變成 1 2 3 null.挑戰分別用歸併排序和快速排序做一遍。題目鏈結 分析快速排序 演算法只交換節點的val值,平均時間複雜度o nlogn 不考慮...
鍊錶之排序鍊錶
148.排序鍊錶 力扣 leetcode leetcode cn.com 題目要求n logn 所以這邊考慮歸併排序 先分,再合,合的話就是合併兩個有序鍊錶,和合併兩個有序陣列一樣簡單 class solution listnode merge listnode l1,listnode l2 ptr...