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

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

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

  • 解题思路

    可以利用归并排序解决该问题。普通的归并排序算法时间复杂度为O(nlogn),空间复杂度为O(n),因为需要建立两个数组来存储原来数组的值,这两个数组的长度加起来恰好为原数组的长度。但是对于链表可以省去复制两个已经排好序的数组的操作,从而使空间复杂度达到O(1)。

  • 实现代码

/*****************************************************************    *  @Author   : 楚兴    *  @Date     : 2015/2/16 21:46    *  @Status   : Accepted    *  @Runtime  : 79 ms******************************************************************/#include 
using namespace std;struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {}};class Solution {public: ListNode * getMiddleOfList(ListNode *head) { ListNode *p = head; ListNode *q = head; while(q->next != NULL && q->next->next != NULL) { p = p->next; q = q->next->next; } return p; } ListNode *mergeList(ListNode *head1, ListNode *head2) { ListNode *merge = new ListNode(-1); ListNode *tmp = merge; while(head1 != NULL && head2 != NULL) { if (head1->val <= head2->val) { tmp->next = head1; head1 = head1->next; } else { tmp->next = head2; head2 = head2->next; } tmp = tmp->next; } if(head1 == NULL) { tmp->next = head2; } else { tmp->next = head1; } return merge->next; } ListNode *sortList(ListNode *head) { if (head == NULL || head->next == NULL) { return head; } ListNode *middle = getMiddleOfList(head); ListNode *next = middle->next; middle->next = NULL; return mergeList(sortList(head), sortList(next)); }};void print(ListNode *head){ ListNode *tmp = head; while(tmp) { cout<
val<<" "; tmp = tmp->next; } cout<
next = node1; ListNode* node2 = new ListNode(5); node1->next = node2; ListNode* node3 = new ListNode(9); node2->next = node3; ListNode* node4 = new ListNode(0); node3->next = node4; ListNode* node5 = new ListNode(1); node4->next = node5; ListNode* node6 = new ListNode(3); node5->next = node6; ListNode* node7= new ListNode(6); node6->next = node7; ListNode* node8 = new ListNode(4); node7->next = node8; print(head); Solution s; s.sortList(head); print(head);}

转载地址:http://emovx.baihongyu.com/

你可能感兴趣的文章
4.终端
查看>>
SSH Secure Shell Client的windows客户端样式设置
查看>>
POJ 1436 Horizontally Visible Segments 线段树 区间更新 区间查询
查看>>
UVa 11549
查看>>
评论:马云擅做平台 不管干哪行都像开赌场
查看>>
MFC——CDC
查看>>
将Firefox设置为使用远程DNS
查看>>
springMVC---级联属性
查看>>
关于SVM数学细节逻辑的个人理解(二):从基本形式转化为对偶问题
查看>>
get和post区别
查看>>
笨办法实现模拟豆机
查看>>
Python 爬虫-抓取中小企业股份转让系统公司公告的链接并下载
查看>>
工作总结:qsort函数用法
查看>>
Android开发最佳学习路线图
查看>>
char(10)、varchar(10)、nchar(10)、nvarchar(10)的区别
查看>>
装饰器
查看>>
c# 第33节 类的封装--访问修饰符
查看>>
archlinux log 文件查看
查看>>
模拟浏览器搜索功能(Ctrl + F)
查看>>
Complex Instance Placement
查看>>