244 鍊錶排序

2021-10-07 21:14:01 字數 843 閱讀 1258

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