zoukankan      html  css  js  c++  java
  • 在o(N log N)时间内使用恒定的空间复杂度对链表进行排序

    时间复杂度要求为o(N log N)所以,排序方法采用归并排序

    代码如下

    package sort;

    class ListNode {
        int val;
        ListNode next;

        ListNode(int x) {
            val = x;
            next = null;
        }
    }


    public class TestListNode {
            public ListNode sortList(ListNode head) {
                if(head==null||head.next==null){
                    return head;
                }
                ListNode mid=getMid(head);
                ListNode midNext=mid.next;
                mid.next=null;//将链表断开
                return margeSort(sortList(head),sortList(midNext));
            }

            private ListNode margeSort(ListNode sortList1, ListNode sortList2) {
                //定义头结点
                ListNode head  = new ListNode(0);
                //临时节点
                ListNode temp =head;
                ListNode n1 = sortList1;
                ListNode n2 = sortList2;
                while(n1!=null&&n2!=null){
                    if(n1.val<n2.val){
                        temp.next=n1;
                        n1=n1.next;
                    }else{
                        temp.next=n2;
                        n2=n2.next;
                    }
                    temp=temp.next;
                }
                temp.next=n1==null?n2:n1;
                //去掉没用的头结点
                return head.next;
            }

            private ListNode getMid(ListNode head) {
                
                if(head==null||head.next==null){
                    return head;
                }
                //利用快慢指针去找到 链表的中间节点
                ListNode fase = head;
                ListNode slow = head;
                while(fase.next!=null&&fase.next.next!=null){
                    slow=slow.next;
                    fase=fase.next.next;
                }
                return slow;
                
            }
            
            
        
    }

  • 相关阅读:
    Mapreduce 工作机制图,MapReduce组合式,迭代式,链式
    win7安装 git软件,如何使用git上传本地代码
    新技术架起 Oracle、Hadoop、NoSQL数据存储之间的桥梁
    Commons-logging + Log4j 使用方法、常见问题
    数据挖掘_面试题一
    未来10年是大数据价值变现的阶段
    数据挖掘十大经典算法
    Java环境变量详细设置
    Hadoop中NameNode、DataNode和Client三者之间的通信方式是什么?怎样进行合作?
    在线图片无损压缩
  • 原文地址:https://www.cnblogs.com/wanglingdeboke/p/9477985.html
Copyright © 2011-2022 走看看