leetcode--SortList
来源:互联网 发布:美丽折淘宝客助手 编辑:程序博客网 时间:2024/06/06 04:04
因为需要时间复杂度为O(nlogn)所以考虑使用归并排序。ListNode不同于数组,因此要重写合并的方法和找中点的方法。这边找中点使用两个指针,一个快,一个慢。当慢指针到达链表尾端时,快指针到达链表中间。
/** * Created by marsares on 15/6/9. */public class SortList { public ListNode sortList(ListNode head) { if(head==null)return null; if(head.next==null)return head; ListNode mid=getMiddleNode(head); return mergeTwoLists(sortList(head),sortList(mid)); } public ListNode getMiddleNode(ListNode l){ ListNode slow=l; ListNode fast=l; ListNode tmp=null; while(fast!=null){ if(fast.next==null)break; tmp=slow; slow=slow.next; fast=fast.next.next; } tmp.next=null; return slow; } public ListNode mergeTwoLists(ListNode l1, ListNode l2) { if(l1==null)return l2; if(l2==null)return l1; ListNode current=null; if(l1.val<l2.val){ current=l1; l1=l1.next; } else{ current=l2; l2=l2.next; } ListNode first=current; while(l1!=null&&l2!=null){ if(l1.val<l2.val){ current.next=l1; l1=l1.next; }else{ current.next=l2; l2=l2.next; } current=current.next; } if(l1==null)current.next=l2; if(l2==null)current.next=l1; return first; } public void printList(ListNode l){ if(l==null)return; while(l.next!=null){ System.out.print(l.val+"->"); l=l.next; } System.out.println(l.val); } public static void main(String[]args){ SortList sl=new SortList(); ListNode n1=new ListNode(5); ListNode n2=new ListNode(1); ListNode n3=new ListNode(2); ListNode n4=new ListNode(4); ListNode n5=new ListNode(3); n1.next = n2; n2.next=n3; n3.next=n4; n4.next=n5; sl.printList(n1); sl.printList(sl.sortList(n1)); /*ListNode m=sl.getMiddleNode(n1); sl.printList(n1); sl.printList(m); ListNode m1=sl.getMiddleNode(n1); sl.printList(n1); sl.printList(m1); sl.printList(sl.mergeTwoLists(n1,m1));*/ }}
0 0
- leetcode || sortlist
- leetcode--SortList
- leetcode---SortList
- leetcode题目解答---- SortList
- leetcode 148 sortList
- Leetcode 148 SortList
- leetcode 148 sortlist
- SortList
- SortList
- SortList
- LeetCode 148: SortList, 206:Reverse linked list
- sortlist.c
- Insert SortList
- 刷题——SortList
- SortList 单链表排序 要求复杂度O(NlgN)
- ASP.net 中Queue,Stack,Hashtable,Sortlist一些简单用法
- SortList非泛型和泛型遍历输出形式
- sortList and Lowest Common Ancestor of a Binary Search Tree
- jQuery Ajax EasyUI周期性更新datagrid的数据
- 第13周项目1-1小玩文件
- 分数的四则运算(c++)
- PHP-获取上周一周的日期
- LeakCanary 中文使用说明
- leetcode--SortList
- 美国网站空间如何选择
- 6.1 Merge Sorted Array
- java 开发webservice
- Monkey Party - HDU 3506 四边形不等式优化
- git github gitlab 之间的区别和联系
- 分数的加减乘除(C++的有理数类)
- Java并发编程:Lock
- Android 3D旋转动画效果