leetcode 148 排序鍊錶 C

2021-09-24 13:43:30 字數 957 閱讀 3260

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

示例 1:

輸入:4->2->1->3輸出:1->2->3->4
bottom-to-up 的歸併思路是這樣的:先兩個兩個的 merge,完成一趟後,再 4 個4個的 merge,直到結束。舉個簡單的例子:[4,3,1,7,8,9,2,11,5,6].

step=1: (3->4)->(1->7)->(8->9)->(2->11)->(5->6)

step=2: (1->3->4->7)->(2->8->9->11)->(5->6)

step=4: (1->2->3->4->7->8->9->11)->5->6

step=8: (1->2->3->4->5->6->7->8->9->11)

/**

* definition for singly-linked list.

* struct listnode

* };

*/class solution

for (int size = 1; size < length; size <<= 1) }}

return dummyhead.next;

}listnode* cut(listnode* head, int n)

if (!p) return nullptr;

auto next = p->next;

p->next = nullptr;

return next;

}listnode* merge(listnode* l1, listnode* l2) else

}p->next = l1 ? l1 : l2;

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