当前位置:   article > 正文

LeetCode Hot100 排序链表

LeetCode Hot100 排序链表

给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。

示例 1:

输入:head = [4,2,1,3]
输出:[1,2,3,4]

示例 2:

输入:head = [-1,5,3,4,0]
输出:[-1,0,3,4,5]

示例 3:

输入:head = []
输出:[]

归并排序

思路

        题目要求O(nlogn)时间复杂度和O(1)空间复杂度,使用归并排序而非是快速排序,归并排序比快排稳定。把链表分割成节点,再合并

代码 

  1. class Solution {
  2. public:
  3. ListNode* merge(ListNode* list1, ListNode* list2)
  4. {
  5. ListNode* mergelist = new ListNode(0);
  6. ListNode* node = mergelist;
  7. while(list1 != nullptr && list2 != nullptr)
  8. {
  9. if(list1->val > list2->val)
  10. {
  11. node->next = list2;
  12. list2 = list2->next;
  13. }
  14. else
  15. {
  16. node->next = list1;
  17. list1 = list1->next;
  18. }
  19. node = node->next;
  20. }
  21. if(list1 != nullptr)
  22. node->next = list1;
  23. else if(list2 != nullptr)
  24. node->next = list2;
  25. return mergelist->next;
  26. }
  27. ListNode* sortList(ListNode* head) {
  28. if(head == nullptr || head->next == nullptr)
  29. return head;
  30. int listlen = 0;
  31. ListNode* res = new ListNode(0, head);
  32. while(head != nullptr)
  33. {
  34. head = head->next;
  35. ++listlen;
  36. }
  37. for(int i=1; i<listlen; i*=2)
  38. {
  39. ListNode* tmp = res->next;
  40. ListNode* tail = res;
  41. while(tmp != nullptr)
  42. {
  43. ListNode* left = tmp;
  44. for(int j=1; j<i && tmp->next!=nullptr; ++j)
  45. tmp = tmp->next;
  46. ListNode* right = tmp->next;
  47. tmp->next = nullptr;
  48. tmp = right;
  49. for(int j=1; j<i && tmp!=nullptr && tmp->next!=nullptr; ++j)
  50. tmp = tmp->next;
  51. ListNode* next = nullptr;
  52. if(tmp != nullptr)
  53. {
  54. next = tmp->next;
  55. tmp->next = nullptr;
  56. }
  57. tail->next = merge(left, right);
  58. while(tail->next != nullptr)
  59. tail = tail->next;
  60. tmp = next;
  61. }
  62. }
  63. ListNode* secondhead = res->next;
  64. delete res;
  65. return secondhead;
  66. }
  67. };

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小舞很执着/article/detail/980662
推荐阅读
相关标签
  

闽ICP备14008679号