Insertion Sort List,Merge Two Sorted Lists,Sort List
Insertion Sort List
Sort a linked list using insertion sort.
1.解题思路
题目很简单,就是要求用插入排序的方法来为链表排序。插入排序就是每次遍历一个新的元素,将其插入到前面已经排好序的元素中。
因为头结点没法确定,所以我们用一个dummy节点;然后开始向后逐个遍历,当前遍历的节点为cur,另外sortnode每次都指向已经排好序的第一个节点dummy,然后从dummy开始往后,直到找到sortnode.next.val>=cur.val,则表示cur节点要插到有序链表的sortnode后面。
2.代码
public class Solution {public ListNode insertionSortList(ListNode head) {if(head==null||head.next==null) return head;ListNode dummy=new ListNode(0);ListNode cur=head;while(cur!=null){ListNode sortnode=dummy;while(sortnode.next!=null&&sortnode.next.val<cur.val)sortnode=sortnode.next;ListNode tmp=cur.next;cur.next=sortnode.next;sortnode.next=cur;cur=tmp;}return dummy.next;}
}
Merge Two Sorted Lists
Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.
1.解题思路
合并两个有序链表,同样需要构造一个Dummy节点。
1)考虑特殊情况,如果有一个链表为空,则直接返回另一个链接;
2)利用两个指针p,q遍历两个链表,如果都不为空,则循环继续;
3)使用node指向新链表的最后一个节点,初始化为dummy
4) 比较p,q的数值的大小,如果p小于q,则把p加到node.next,并且node赋值为p,而p指针需要前进一个;
5) 结束循环时,check一下是否还有链表中有剩余元素,并将剩余元素加入到新链表node指针的后面。
2.代码
public class Solution {public ListNode mergeTwoLists(ListNode l1, ListNode l2) {if(l1==null) return l2;if(l2==null) return l1;ListNode dummy=new ListNode(0);ListNode p=l1;ListNode q=l2;ListNode node=dummy;while(p!=null&&q!=null){if(p.val<q.val){node.next=p;node=p;p=p.next;}else {node.next=q;node=q;q=q.next;}}if(p!=null)node.next=p;if(q!=null)node.next=q;return dummy.next;}
}
Sort List
Sort a linked list in O(n log n) time using constant space complexity.
1.解题思路
题目要求时间复杂度为O(n log n),所以我们就想到用归并排序,自然就想到和上一题的mergeTwoLists。
但要做mergeTwoLists,必须得先将当前的list分割成两个List,所以采用递归实现。
要分割链表,最简单的办法就是找到中点,那很明显是利用slow,fast来实现,最后slow就是链表的中间点。但要注意我们要将Slow的前一个节点记录下来pre,在找到中点后,我们要将pre.next=null,这样链表才能分割成2个。
2.代码
public class Solution {public ListNode sortList(ListNode head) {if(head==null||head.next==null) return head;ListNode slow=head,fast=head,pre=null;while(fast!=null&&fast.next!=null){pre=slow;slow=slow.next;fast=fast.next.next;}pre.next=null;ListNode l1=sortList(head);ListNode l2=sortList(slow);return mergeTwoSortedList(l1,l2);}private ListNode mergeTwoSortedList(ListNode l1,ListNode l2){if(l1==null) return l2;if(l2==null) return l1;ListNode dummy=new ListNode(0);ListNode p=l1;ListNode q=l2;ListNode node=dummy;while(p!=null&&q!=null){if(p.val<q.val){node.next=p;node=p;p=p.next;}else {node.next=q;node=q;q=q.next;}}if(p!=null)node.next=p;if(q!=null)node.next=q;return dummy.next;}
}
Insertion Sort List,Merge Two Sorted Lists,Sort List相关推荐
- LeetCode刷题记录15——21. Merge Two Sorted Lists(easy)
LeetCode刷题记录15--21. Merge Two Sorted Lists(easy) 目录 LeetCode刷题记录15--21. Merge Two Sorted Lists(easy) ...
- LeetCode 之 JavaScript 解答第23题 —— 合并K个有序链表(Merge K Sorted Lists)
Time:2019/4/10 Title: Merge K Sorted Lists Difficulty: Difficulty Author: 小鹿 题目:Merge K Sorted Lists ...
- 【LeetCode】【数组归并】Merge k Sorted Lists
描述 Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity ...
- Leetcode 21:Merge Two Sorted Lists(golang实现合并两条已经排序的链表)
21.Merge Two Sorted Lists 题目链接:题目链接 Merge two sorted linked lists and return it as a new list. The n ...
- 合并k个有序链表 python_[LeetCode] 23. Merge k Sorted Lists 合并k个有序链表
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. E ...
- LeetCode算法入门- Merge Two Sorted Lists -day15
LeetCode算法入门- Merge Two Sorted Lists -day15 题目描述: Merge two sorted linked lists and return it as a n ...
- 21.Merge Two Sorted Lists 、23. Merge k Sorted Lists
21.Merge Two Sorted Lists 初始化一个指针作为开头,然后返回这个指针的next class Solution { public:ListNode* mergeTwoLists( ...
- 71. Merge k Sorted Lists
Merge k Sorted Lists Merge k sorted linked lists and return it as one sorted list. Analyze and descr ...
- [LeetCode] Merge k Sorted Lists 合并k个有序链表
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. E ...
最新文章
- 比Momentum更快:揭开Nesterov Accelerated Gradient的真面目NAG 梯度下降
- The Innovation | 中科院青促会主办精品英文期刊视频简介,定位IF 20+国际顶刊
- 数组方法深入扩展(遍历forEach,filter,reduce等)
- sublime text 3 快捷键大全以及配置编译环境
- RabbitMQ(七):常用方法说明 与 学习小结
- MySQL 全文索引实现简单版搜索引擎
- Disk Quota磁盘配额
- java同步读写,关于java:Collections中的synchronizedMap方法是否同步读写操作
- 《学习R》笔记:科学计算器、检查变量和工作区、向量、矩阵和数组、列表和数据框...
- 如何预防后台被攻击?Tomcat 的安全配置来啦!
- 创造11,你pick哪位讲师?
- CSS 普通流 和 行格式化上下文 IFC
- L1-028. 判断素数-PAT团体程序设计天梯赛GPLT
- 【BZOJ 3097】 Hash Killer I
- 读书报告1500字计算机大学篇,读书报告2000字大学篇
- 红黑树 之 原理和算法详细介绍
- Nao机器人运行B-human代码之基础篇
- TP5简单实现类似京东淘宝多级商品筛选功能。
- 信息化知识-信息与信息化
- java拦截器放行_Java Filter(拦截器)
热门文章
- IDEA配置git环境
- 5G NR 频率 带宽 栅格
- Oracle格式化数字和日期的方法
- jvm timezone
- codeforces 1027 B - Numbers on the Chessboard(规律)
- Android批量打包 如何一秒内打完几百个apk渠道包
- Bootstrap框架系列 - 初识
- 编写高质量代码:改善Java程序的151个建议(第1章:JAVA开发中通用的方法和准则___建议1~5)...
- 如何优化电子邮件营销的效果
- 《那些年啊,那些事——一个程序员的奋斗史》——104