3 排序鍊錶 LeetCode 148

2021-10-07 19:13:08 字數 2169 閱讀 5123

問題描述 :

在 o(n log n) 時間複雜度和常數級空間複雜度下,對鍊錶進行排序。

示例 1:

輸入: 4->2->1->3

輸出: 1->2->3->4

示例 2:

輸入: -1->5->3->4->0

輸出: -1->0->3->4->5

可使用以下**,完成其中的sortlist函式,其中形參head指向無頭結點單鏈表。

#include

using namespace std;

struct listnode

int val;

listnode *next;

listnode() : val(0), next(null) {}

listnode(int x) : val(x), next(null) {}

listnode(int x, listnode *next) : val(x), next(next) {}

class solution listnode *createbytail()

listnode *head;

listnode *p1,*p2;

int n=0,num;

int len;

cin>>len;

head=null;

while(n>num)

return head;

void displaylink(listnode *head)

listnode *p;

p=head;

cout<<"head-->";

while(p!= null)

cout<<"tail\n";

int main()

listnode* head = createbytail();

head=solution().sortlist(head);

displaylink(head);

return 0;

輸入說明 :

首先輸入鍊錶長度len,然後輸入len個整數,以空格分隔。

輸出說明 :

輸出格式見範例

輸入範例 :

5-1 5 3 4 0

輸出範例 :

head–>-1–>0–>3–>4–>5–>tail

思想:歸併排序

快慢指標找到鍊錶中間節點,然後按照這個中間節點劃分為左右兩部分

最後合併左右兩部分 */

#include

#include

using

namespace std;

struct listnode

listnode

(int x)

:val

(x),

next

(null)}

;class

solution

pre-

>next =

null

;//遞迴左右子表

listnode *left =

sortlist

(head)

; listnode *right =

sortlist

(slow)

;//合併結果

return

mergetwolists

(left,right);}

//合併兩個有序鍊錶,使合併後的鍊錶任然有序

listnode *

mergetwolists

(listnode *left,listnode *right)

else

pre = pre-

>next;

}//左表還有剩餘節點

if(left)

//右表還有剩餘結點

if(right)

return dummy.next;}}

;listnode *

createbytail()

return head;

}void

displaylink

(listnode *head)

cout<<

"tail\n";}

intmain()

leetcode 14 合併k個排序鍊錶

合併 k 個排序鍊錶,返回合併後的排序鍊錶。請分析和描述演算法的複雜度。示例 輸入 1 4 5,1 3 4,2 6 輸出 1 1 2 3 4 4 5 6 在k個鍊錶中找到乙個比較節點,然後把k個鍊錶分成兩部分,一部分都比比較節點小,一部分都比比較節點大,然後遞迴。但是時間太慢了,原因乙個是,找到的比...

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在陣列儲存下的歸併排序,需要借出輔助空間完成,而鍊錶儲存的歸併排序,不需要借助輔助空間,直接在原來的鍊錶上進行操作,...

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歸併這裡我感覺有點不符合題意 不符合常數空間 如果是快排的話呢,交換節點還是很麻煩的,所以快排交換值了 癱.jpg cl...