[leetcode]Sort List

题目要求:
Sort a linked list in O(n log n) time using constant space complexity.

 数据结构定义:

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  */

这里用的数据结构是单链表。时间复杂度是O(n log n)的排序算法有:堆排序,快速排序,归并排序。题目要求使用常量的空间复杂度,这三种排序方法的空间复杂度分别是O(n),O(1),O(n)[对于数组]。归并排序的空间复杂度是O(n),因为对于数组,归并排序需要额外的O(n)的空间来处理数组,而对于链表而言,操作都是对指针的,所以可以将空间复杂度降到O(1)。

这里使用归并排序来实现代码。

 

 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         if (head == NULL)
13             return head;
14         else if (head->next == NULL) 
15             return head;
16         
17         ListNode *slow = head, *fast = head;
18         while (fast->next != NULL && fast->next->next != NULL)
19         {
20             slow = slow->next;
21             fast = fast->next->next;
22         }
23         
24         fast = slow;
25         slow = slow->next;
26         fast->next = NULL;
27         
28         fast = sortList(head);
29         slow = sortList(slow);
30         
31         return mergeList(fast,slow);
32         
33     }
34     ListNode* mergeList(ListNode* list1Head, ListNode* list2Head){
35         if (list1Head == NULL) return list2Head;
36         if (list2Head == NULL) return list1Head;
37         
38         ListNode* result, *temp;
39         // initialize the first node of the merged result list
40         if (list1Head->val < list2Head->val){
41             result = list1Head;
42             list1Head = list1Head->next;
43         }
44         else
45         {
46             result = list2Head;
47             list2Head = list2Head->next;
48         }
49         // operate the result list with temp
50         temp = result;
51         // end merge if at least one of the two lists reaches the tail node
52         while (list1Head != NULL && list2Head != NULL){
53             if (list1Head->val < list2Head->val){
54                 temp->next = list1Head;
55                 list1Head = list1Head->next;
56             }
57             else{
58                 temp->next = list2Head;
59                 list2Head = list2Head->next;
60             }
61             temp = temp->next;
62         }
63         
64         if (list1Head != NULL)
65             temp->next = list1Head;
66         else
67             temp->next = list2Head;
68             
69         return result;
70     }
71 };

这个简单的OJ浪费了我大概半个多小时在调试BUG,实在有点太菜了。AC之前我的代码遇到了下面几个恶心的BUG。

1. 在找到链表的中间节点后,用head和slow来表示左右两个子脸变的时候,没有把中间节点的next指针置为空,导致程序无限递归,最后导致堆溢出。

2. 在合并排序数组的函数中,处理未添加到result链表中的节点(64~67)时,if语句条件写错了。....

.....

沉心学习,努力积累,希求爆发。

 

转载于:https://www.cnblogs.com/alway6s/p/3769662.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/375822.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

北京市中 高英语听说计算机考,2021年北京高考首次英语听说机考时间确定,共五种题型...

从明年开始&#xff0c;北京市高考统考英语科目增加口语考试&#xff0c;连同之前的听力考试一起&#xff0c;实行一年两考。今天&#xff0c;北京教育考试院发布消息&#xff0c;2021年高考英语听说计算机考试首考将于2020年12月12日进行。12月7日起&#xff0c;考生可登陆北京…

NewCode----彩色宝石项链

题目描述: 有一条彩色宝石项链&#xff0c;是由很多种不同的宝石组成的&#xff0c;包括红宝石&#xff0c;蓝宝石&#xff0c;钻石&#xff0c;翡翠&#xff0c;珍珠等。有一天国王把项链赏赐给了一个学者&#xff0c;并跟他说&#xff0c;你可以带走这条项链&#xff0c;但是…

插件开发-UI插件开发

1.新建类库解决方案&#xff0c;引入命名空间,同时引入要添加UI Form的WebPart(在Portal\UILib目录下)2.继续UFSoft.UBF.UI.Custom.ExtendedPartBase&#xff0c;重写AfterInit()方法&#xff0c;代码如下&#xff0c;便于添加下拉列表按钮&#xff0c;在原单据中UI先新增一下拉…

为博客园选择一个小巧霸气的语法高亮插件

博客园的语法高亮简直蛋疼&#xff0c;于是乎就打算找一个靠谱的插件来改造下。各种百度谷歌&#xff0c;大致得到几个推荐&#xff1a;SyntaxHighlighter&#xff0c;Snippet&#xff0c;Google Code Pretiffy&#xff0c;Highlight&#xff0c;SHJS。其实 SyntaxHighlighter …

计算器软件设计和计算机软件设计区别,求一个模拟计算器程序

# include# include# include# include# define MAX_OPERATOR_NUM 100//运算符栈数组长度# define MAX_DATA_NUM 100//运算数栈数组长度typedef struct OPStack//定义运算符栈{char opStack[MAX_OPERATOR_NUM];int top;}OPStack, *pOPStack;typedef struct DATAStack//定义操作…

python中print语句

学习链接1 学习链接2 1. 如果print语句后面什么符号都没有是个换行语句&#xff0c;也就是是要另起一行。 2. 分号表示下次输出是紧挨着这个光标位置输出. 3. 而逗号是下次输出与这次输出有一定的空格之后接着输出. namekk salutationMr. greetingHello, print greeting,sa…

计算机应用基础论坛贴子怎么发,网络课程论坛中长尾现象的应对策略——以《计算机应用基础》网络课程为例...

摘要&#xff1a;进入21世纪以来,互联网就备受关注.由于我国信息设施资源建设稳步推进,互联网的基础更为坚实,发展更为迅速.据权威数据统计,中国至2009年约拥有130万个BBS论坛,数量为全球第一,然而,作为分享和参与类应用的典型代表(更新博客,发帖/回帖)的使用率仍然偏低.笔者在…

解析Json需要设置Mime

IIS6.0 1.打开IIS添加Mime项 关联扩展名&#xff1a;*.json内容类型(MIME)&#xff1a;application/x-javascript 2.添加映射&#xff1a; 位置在IIS对应站点右键属性&#xff1a;”主目录”-”应用程序设置”-”配置”-”映射”-”添加”&#xff0c;会打开”添加/编辑应用程序…

Using the Transient Fault Handling Application Block

http://msdn.microsoft.com/en-us/library/dn440719(vpandp.60).aspx转载于:https://www.cnblogs.com/fengye87626/p/3772555.html

让python脚本像普通程序一样运行

有些时候像运行其他程序一样运行python程序&#xff08;也叫做脚本&#xff09;&#xff0c;而不是显式使用python解释器。在UNIX中有个标准的实现方法&#xff1a;在脚本首行前面加上#&#xff01;&#xff08;叫做pound bang或者shebang&#xff09;&#xff0c;在其后加上用…

Function类型(JS高程3)—— JS学习笔记2015-6-29(第70天)

Function 类型 函数是对象 具有属性和方法&#xff0c;函数名实际上是一个指向函数对象的指针 没有重载&#xff1b; 函数声明和函数表达式 函数声明&#xff1a; function sum (num1, num2){ return num1 num2; } 函数表达式&#xff1a; var sum function(num1, num2){ ret…

PS图片删除需要计算机管理权限,如何使用PsTools工具执行本地/远程PC管理任务

大多数刚入门的管理员都习惯使用 RDP 或其它类似的工具连接到远程 Windows 中进行图形化管理。而 PowerShell 及 PsTools 等工具可以帮助我们在命令行中执行相当多的管理任务&#xff0c;更主要的是可以将其写成脚本来执行周期性重复任务或在管理大批量服务器时提高效率。在企业…

LeetCode:Spiral Matrix I II

Spiral Matrix Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order. For example, Given the following matrix: [[ 1, 2, 3 ],[ 4, 5, 6 ],[ 7, 8, 9 ] ] You should return [1,2,3,6,9,8,7,4,5]. 打印螺旋矩阵 逐个环…

TCP为什么需要三次握手和四次挥手

网上已经有很多解释了&#xff0c;就不瞎说了&#xff0c;Mark一些链接作为自己的学习笔记吧。 学习参考链接1 学习参考链接2 学习参考链接3 学习参考链接4 为什么要3次握手 防止已过期的连接请求报文突然又传送到服务器&#xff0c;因而产生错误。 Client发生一个请求连…

不属于个人计算机范围的是,计算机应用基础模拟试卷2

一、1.单项选择题单项选择题每小题1分。在每小题列出的四个备选项中只有一个是符合题目要求的&#xff0c;请将其选出并将“答题卡”的相应代码涂黑。未涂、错涂或多涂均无分。0. 个人计算机属于A&#xff0e;小巨型机B&#xff0e;小型计算机C&#xff0e;微型计算机D&#xf…

Python实验:关灯游戏

文章目录 前言一、设计表二、关键代码三、运行结果小地图&#xff0c;容易难度&#xff1a;中地图&#xff0c;中等难度&#xff1a;大地图&#xff0c;困难难度&#xff1a; 四、完整代码链接总结 前言 这是一个Python实验作业&#xff0c;内容如下&#xff1a; 题目要求&am…

解决Ubuntu14.04在外接显示器不能指定问题的最佳分辨率

通常这种情况发生。在System Settings -> display 你会发现多出了一个 unknown display。这往往是因为你使用质量低劣的视频电缆&#xff0c;例如&#xff0c;几美元VGA线。解决方案有&#xff12;&#xff0c;质量好的一个改变钢带&#xff08;有磁场干扰&#xff09;VGA线…

基础练习 - 数值交换

题目 1 声明两个变量&#xff1a;int n1 10,n2 20,要求将两个变量叫唤&#xff0c;最后输出n1为20,n2为10. (扩展*: 不使用第三个变量如何交换) 解决方案 基本方法 private static void BasicMethod(){int n1 10;int n2 20;Console.WriteLine("n1…

python计算圆的面积

用Python创建一个脚本&#xff0c;要求&#xff1a; 能计算半径为2的圆的面积保留10位小数可以直接执行 #!/usr/bin/env python3 import math print("Area is:{:.10f}".format(math.pi*4))计算圆的面积要用到pi&#xff0c;所以我们引用模块math

Visual Studio 配色方案

字体&#xff1a;Fixedsys Excelsior 字体大小&#xff1a;12 配色方案&#xff1a;http://studiostyles.info 导入步骤&#xff1a; 工具->导入和导出设置->导入选定的环境设置->否&#xff0c;仅导入新设置->“浏览”->下载的vssetings文件->完成。 转载于…