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

  • 相关阅读:
    springboot 打包部署
    mybatis 插入空值时报错 TypeException
    margin 居中
    node.js 开发命令行工具 发布npm包
    webstorm vue环境设置
    vue数组操作不触发前端重新渲染
    数字英文超过宽度不换行问题
    Jquery checkbox 遍历
    小图标垂直居中
    vue this.$router.push 页面不刷新
  • 原文地址:https://www.cnblogs.com/wanglingdeboke/p/9477985.html
Copyright © 2011-2022 走看看