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相关推荐

  1. LeetCode刷题记录15——21. Merge Two Sorted Lists(easy)

    LeetCode刷题记录15--21. Merge Two Sorted Lists(easy) 目录 LeetCode刷题记录15--21. Merge Two Sorted Lists(easy) ...

  2. LeetCode 之 JavaScript 解答第23题 —— 合并K个有序链表(Merge K Sorted Lists)

    Time:2019/4/10 Title: Merge K Sorted Lists Difficulty: Difficulty Author: 小鹿 题目:Merge K Sorted Lists ...

  3. 【LeetCode】【数组归并】Merge k Sorted Lists

    描述 Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity ...

  4. 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 ...

  5. 合并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 ...

  6. LeetCode算法入门- Merge Two Sorted Lists -day15

    LeetCode算法入门- Merge Two Sorted Lists -day15 题目描述: Merge two sorted linked lists and return it as a n ...

  7. 21.Merge Two Sorted Lists 、23. Merge k Sorted Lists

    21.Merge Two Sorted Lists 初始化一个指针作为开头,然后返回这个指针的next class Solution { public:ListNode* mergeTwoLists( ...

  8. 71. Merge k Sorted Lists

    Merge k Sorted Lists Merge k sorted linked lists and return it as one sorted list. Analyze and descr ...

  9. [LeetCode] Merge k Sorted Lists 合并k个有序链表

    Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. E ...

最新文章

  1. 比Momentum更快:揭开Nesterov Accelerated Gradient的真面目NAG 梯度下降
  2. The Innovation | 中科院青促会主办精品英文期刊视频简介,定位IF 20+国际顶刊
  3. 数组方法深入扩展(遍历forEach,filter,reduce等)
  4. sublime text 3 快捷键大全以及配置编译环境
  5. RabbitMQ(七):常用方法说明 与 学习小结
  6. MySQL 全文索引实现简单版搜索引擎
  7. Disk Quota磁盘配额
  8. java同步读写,关于java:Collections中的synchronizedMap方法是否同步读写操作
  9. 《学习R》笔记:科学计算器、检查变量和工作区、向量、矩阵和数组、列表和数据框...
  10. 如何预防后台被攻击?Tomcat 的安全配置来啦!
  11. 创造11,你pick哪位讲师?
  12. CSS 普通流 和 行格式化上下文 IFC
  13. L1-028. 判断素数-PAT团体程序设计天梯赛GPLT
  14. 【BZOJ 3097】 Hash Killer I
  15. 读书报告1500字计算机大学篇,读书报告2000字大学篇
  16. 红黑树 之 原理和算法详细介绍
  17. Nao机器人运行B-human代码之基础篇
  18. TP5简单实现类似京东淘宝多级商品筛选功能。
  19. 信息化知识-信息与信息化
  20. java拦截器放行_Java Filter(拦截器)

热门文章

  1. IDEA配置git环境
  2. 5G NR 频率 带宽 栅格
  3. Oracle格式化数字和日期的方法
  4. jvm timezone
  5. codeforces 1027 B - Numbers on the Chessboard(规律)
  6. Android批量打包 如何一秒内打完几百个apk渠道包
  7. Bootstrap框架系列 - 初识
  8. 编写高质量代码:改善Java程序的151个建议(第1章:JAVA开发中通用的方法和准则___建议1~5)...
  9. 如何优化电子邮件营销的效果
  10. 《那些年啊,那些事——一个程序员的奋斗史》——104