鍊錶歸併排序的三大神器:
1.merge(l1,l2)
l1和l2分別為兩個有序的鍊錶,該方法將l1和l2合併為乙個新的有序鍊錶。
public listnode merge
(listnode l1,listnode l2)
else}if
(l1!=null)
if(l2!=null)
return head.next;
}
2.cut(head,n)
該方法將鍊錶head切掉前n個節點,返回後半部分的鍊錶,head縮短為只剩前n個節點的鍊錶
public listnode cut
(listnode head,
int n)
if(head!=null)
else
}
3.dummyhead啞煉表頭
臨時建立的乙個煉表頭,可以把邊界情況和普通情況做統一處理。
例題:
在 o(n log n) 時間複雜度和常數級空間複雜度下,對鍊錶進行排序。
示例 1:
輸入: 4->2->1->3
輸出: 1->2->3->4
示例 2:
輸入: -1->5->3->4->0
輸出: -1->0->3->4->5
**:
class
solution
listnode work;
listnode left;
listnode right;
for(
int step=
1;step}}
return dummyhead.next;
}public listnode cut
(listnode head,
int n)
if(head!=null)
else
}public listnode merge
(listnode l1,listnode l2)
else}if
(l1!=null)
if(l2!=null)
return head.next;
}}
鍊錶歸併排序
include include include include include using namespace std typedef int type typedef struct nodetag node node build type a,int n pnode pnext null retu...
鍊錶歸併排序
主要思路 1 如果為null或者只有乙個節點那麼直接返回 2 將鍊錶分成兩部分,分別進行排序,形成兩個有序鍊錶 3 將兩個有序鍊錶合併 void merge sort struct node list void split struct node head,struct node lista,str...
鍊錶 歸併排序
時間複雜度o nlogn 空間複雜度o 1 include include 定義鍊錶 typedef struct listnode linklist linklist head null 建立鍊錶 linklist createlist int arr,int len rear next null...