【Leetcode】Sort List JAVA实现
来源:互联网 发布:ftp上传工具 mac版 编辑:程序博客网 时间:2024/06/05 03:16
1、题:
Sort a linked list in O(n log n) time using constant space complexity.
2、分析
该题主要考查了链接上的合并排序算法。
3、代码实现
package com.edu.leetcode;import com.edu.leetcode.ListNode;public class SortList {/** * @param args */public ListNode Merge(ListNode first,ListNode second){ //合并两个有序链表,并返回新链表的投结点ListNode rear;ListNode head;rear=head=new ListNode(-1);while(first!=null&&second!=null){if(first.val<=second.val){rear.next=first;rear=first;first=first.next;}else{rear.next=second;rear=second;second=second.next;}}if(first!=null)rear.next=first;elserear.next=second;return head.next;}public ListNode sortList(ListNode head){ /* * 实现链表的合并排序:1、将链表划分成基本相等的两个链表 * 2、递归将这两个链接继续划分,直到链表的长度为0或者1为止 * 3、调用Merge()将链接进行合并 */if(head==null||head.next==null)return head;ListNode mid =head;ListNode pos =mid.next;while(pos!=null){pos=pos.next;if(pos!=null){pos=pos.next;mid=mid.next;}}ListNode q=sortList(mid.next);mid.next=null;return Merge(sortList(head), q);}public static void main(String[] args) {// TODO Auto-generated method stubListNode first1 = new ListNode(0);ListNode rear1 =first1;for(int i=9;i>=1;i--){ListNode q= new ListNode(i);rear1.next=q;rear1=q;}ListNode q=first1;while(q!=null){System.out.print(q.val+ ",");q=q.next;}System.out.println();SortList sl = new SortList();sl.sortList(first1);ListNode p=first1;while(p!=null){System.out.print(p.val+ ",");p=p.next;}System.out.println();}}
这里的问题主要是将上面的SortList()方法分成两步实现:Divide()和
MergeSort()两部分。个人觉得应该是一样的。但运行结果确实不同,如果大神浏
览,请指点一下小弟。。
class ListNode{int val;ListNode next=null;public ListNode(){}public ListNode(int val){this.val=val;}}public class SortList {public ListNode Merge(ListNode first,ListNode second){ListNode rear;ListNode head;rear=head=new ListNode();while(first!=null&&second!=null){if(first.val<=second.val){rear.next=first;rear=first;first=first.next;}else{rear.next=second;rear=second;second=second.next;}}if(first!=null)rear.next=first;elserear.next=second;return head.next;}public ListNode Divide(ListNode first){ <span style="line-height: 1.5; font-family: 'Courier New'; white-space: pre-wrap;">//将一个链表划分成两个基本相等的子链表</span>if(first==null)return null;ListNode mid =first;ListNode pos =mid.next;while(pos!=null){pos=pos.next;if(pos!=null){pos=pos.next;mid=mid.next;}}ListNode q=mid.next;mid.next=null;return q;}public void MergeSort(ListNode first){if(first!=null&&first.next!=null){ListNode second =Divide(first);MergeSort(first);MergeSort(second);Merge(first, second);}}public static void main(String[] args) {// TODO Auto-generated method stubListNode first1 = new ListNode(0);ListNode rear1 =first1;for(int i=9;i>=1;i--){ListNode q= new ListNode(i);rear1.next=q;rear1=q;}ListNode q=first1;while(q!=null){System.out.print(q.val+ ",");q=q.next;}System.out.println();SortList sl = new SortList();sl.MergeSort(first1);ListNode p=first1;while(p!=null){System.out.print(p.val+ ",");p=p.next;}System.out.println();}}
0 0
- 【Leetcode】Sort List JAVA实现
- [Leetcode] Sort List (Java)
- LeetCode:Sort List (Java)
- Leetcode: Sort List (Java)
- Sort List leetcode java
- leetcode: Sort List, Merge sort solution. Java
- [Leetcode] Insertion Sort List (Java)
- LeetCode:Insertion Sort List (Java)
- LeetCode Sort List Java版本
- [LeetCode] 148. Sort List java
- Insertion Sort List Leetcode java
- [leetcode][list][sort] Sort List
- LeetCode 之 Sort List — C 实现
- leetcode 147 Insertion Sort List java 算法
- leetcode题解Java | 148. Sort List
- [LeetCode] 147. Insertion Sort List java
- leetcode Sort Colors java实现
- 【LeetCode-面试算法经典-Java实现】【147-Insertion Sort List(链表插入排序)】
- Struts2:通过action标签向页面传值
- java自带dom工具使用实例
- #ifdef __cplusplus 倒底是什么意思?
- struts2连接数据库实现用户注册与登录
- C++函数指针实例详解(篇五)
- 【Leetcode】Sort List JAVA实现
- ArcGIS For Flex报错二
- 考研or就业
- .bashrc文件
- Ping程序
- boost资料
- C++ primer 第五版 中文版 练习 12.24 个人code
- 第二周工作总结及计划表
- Android NDK单步断点调试