博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode:Sort List
阅读量:5797 次
发布时间:2019-06-18

本文共 2118 字,大约阅读时间需要 7 分钟。

题目如下:()

Sort a linked list in O(n log n) time using constant space complexity.

在中使用了插入排序,时间复杂度为O(n^2)。nlogn的排序有快速排序、归并排序、堆排序。双向链表用快排比较适合,堆排序也可以用于链表,单向链表适合用归并排序。以下是用归并排序的代码:        

1 /** 2  * Definition for singly-linked list. 3  * struct ListNode { 4  * int val; 5  * ListNode *next; 6  * ListNode(int x) : val(x), next(NULL) {} 7  * }; 8  */ 9 class Solution {10 public:11     ListNode *sortList(ListNode *head) {12         // IMPORTANT: Please reset any member data you declared, as13         // the same Solution instance will be reused for each test case.14         //链表归并排序15         if(head == NULL || head->next == NULL)return head;16         else17         {18             //快慢指针找到中间节点19             ListNode *fast = head,*slow = head;20             while(fast->next != NULL && fast->next->next != NULL)21             {22                 fast = fast->next->next;23                 slow = slow->next;24             }25             fast = slow;26             slow = slow->next;27             fast->next = NULL;28             fast = sortList(head);//前半段排序29             slow = sortList(slow);//后半段排序30             return merge(fast,slow);31         }32         33     }34     // merge two sorted list to one35     ListNode *merge(ListNode *head1, ListNode *head2)36     {37         if(head1 == NULL)return head2;38         if(head2 == NULL)return head1;39         ListNode *res , *p ;40         if(head1->val < head2->val)41             {res = head1; head1 = head1->next;}42         else{res = head2; head2 = head2->next;}43         p = res;44         45         while(head1 != NULL && head2 != NULL)46         {47             if(head1->val < head2->val)48             {49                 p->next = head1;50                 head1 = head1->next;51             }52             else53             {54                 p->next = head2;55                 head2 = head2->next;56             }57             p = p->next;58         }59         if(head1 != NULL)p->next = head1;60         else if(head2 != NULL)p->next = head2;61         return res;62     }63 };

【版权声明】转载请注明出处:

转载于:https://www.cnblogs.com/TenosDoIt/p/3434550.html

你可能感兴趣的文章
做完小程序项目、老板给我加了6k薪资~
查看>>
脱离“体验”和“安全”谈盈利的游戏运营 都是耍流氓
查看>>
TortoiseSVN中图标的含义
查看>>
Python version 2.7 required, which was not foun...
查看>>
[BZOJ] 1012 [JSOI2008]最大数maxnumber
查看>>
根据毫秒数计算出当前的“年/月/日/时/分/秒/星期”并不是件容易的事
查看>>
Unity Shaders and Effects Cookbook (3-5) 金属软高光
查看>>
31-hadoop-hbase-mapreduce操作hbase
查看>>
NYOJ283对称排序
查看>>
C#反射实例应用--------获取程序集信息和通过类名创建类实例
查看>>
VC中实现文字竖排的简单方法
查看>>
程序员常用的六大技术博客类
查看>>
深入理解浏览器的缓存机制
查看>>
又拍云沈志华:如何打造一款安全的App
查看>>
dubbo源码分析-架构
查看>>
6套毕业设计PPT模板拯救你的毕业答辩
查看>>
Windows phone 8 学习笔记
查看>>
我的友情链接
查看>>
sshd_config设置参数笔记
查看>>
LeetCode--112--路径总和
查看>>