LeetCode 148 排序鍊錶

2021-09-22 07:50:19 字數 1131 閱讀 8313

在 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)時間複雜度下進行排序,選擇歸併排序

思路:在整個鍊錶進行排序過程中,先利用快慢指標不斷進行遞迴劃分,劃分成兩個鍊錶進行排序,之後進行sort過程,借用兩個鍊錶指標指向劃分後鍊錶,進行遍歷;在sort排序時,建立乙個新鍊錶,用乙個指標指向新鍊錶,比較劃分好的l1和l2鍊錶,哪個值小就放入新鍊錶,直到結束 [ps:要對l1遍歷結束,但l2還未結束;l2遍歷結束,但l1還未結束的情況進行討論]

/**

* definition for singly-linked list.

* struct listnode

* };

*/class solution

listnode *slow = head;

listnode *fast = head;

while(slow->next != null && fast->next != null && fast->next->next != null)

listnode *last = slow->next;

slow->next = null; //斷開鍊錶 //構成兩個鍊錶進行排序

listnode *pre = sortlist(head); //pre指向以head為頭節點的鍊錶//遞迴劃分

listnode *las = sortlist(last); //las指向以last為頭節點的鍊錶//遞迴劃分

return sort(pre,las);

}//直接傳遞兩個鍊錶的指標

listnode* sort(listnode* l1,listnode* l2)

else

}if(l1 != null) //l2已結束,但l1還有剩餘鍊錶

if(l2 != null)

return ans->next;

}};

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

leetcode148 排序鍊錶

在 o n log n 時間複雜度和常數級空間複雜度下,對鍊錶進行排序。示例 1 輸入 4 2 1 3 輸出 1 2 3 4 示例 2 輸入 1 5 3 4 0 輸出 1 0 3 4 5 看到題目就知道要二分,這裡用的是遞迴版歸併 definition for singly linked list....