• 在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;
                
            }
            
            
        
    }

  • 相关阅读:
    从一个word文件中读取所有的表格和标题(1)
    多线程下QAxObject指针为NULL的解决办法
    event对象,ie8及其以下
    日期插件kalendae,遇到的一些问题
    回车键和button按钮都绑定同一个事件,如何避免按回车的时候button重复点击
    jQuery.Cookie.js用法
    jquery操作radio单选按钮、checked复选框。
    拖拽改变div的大小
    [BZOJ 2242] [SDOI 2011] 计算器
    20181016提高测试
  • 原文地址:https://www.cnblogs.com/wanglingdeboke/p/9477985.html
Copyright © 2020-2023  润新知