在 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.
* struct listnode
* };
*/class solution
// 這裡有個快慢指標,拆分鍊錶的流程。
listnode *p = head;
listnode *slow = head;
listnode *fast = head;
while(fast && fast->next)
p->next= nullptr;
// 歸併排序
return merge(sortlist(head), sortlist(slow));
}listnode* merge(listnode *l1, listnode *l2) else
curr = curr->next;
}if(l1) curr->next = l1;
if(l2) curr->next = l2;
return dummy->next;
}};
鍊錶 排序鍊錶
樂扣原題 definition for singly linked list.public class listnode class solution 將鍊錶轉化為陣列 listlist new arraylist while null head 陣列遞增排序 collections.sort li...
鍊錶 鍊錶排序 中等
描述 在 o n log n 時間複雜度和常數級的空間複雜度下給鍊錶排序。您在真實的面試中是否遇到過這個題?樣例給出 1 3 2 null,給它排序變成 1 2 3 null.挑戰分別用歸併排序和快速排序做一遍。題目鏈結 分析快速排序 演算法只交換節點的val值,平均時間複雜度o nlogn 不考慮...
鍊錶之排序鍊錶
148.排序鍊錶 力扣 leetcode leetcode cn.com 題目要求n logn 所以這邊考慮歸併排序 先分,再合,合的話就是合併兩個有序鍊錶,和合併兩個有序陣列一樣簡單 class solution listnode merge listnode l1,listnode l2 ptr...