鍊錶歸併排序問題的解決方式

2021-10-07 10:18:04 字數 1150 閱讀 1758

鍊錶歸併排序的三大神器:

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...