• 排序链表


    此博客链接:https://www.cnblogs.com/ping2yingshi/p/12769166.html

    排序链表(92min)

    题目链接:https://leetcode-cn.com/problems/sort-list/comments/

    在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。

    示例 1:

    输入: 4->2->1->3
    输出: 1->2->3->4
    示例 2:

    输入: -1->5->3->4->0
    输出: -1->0->3->4->5

    题解:

            思路:

                     1.遍历链表,把链表中的数和列表中的数做比较,把链表中的数加入比列表数小的前面一个位置,使列表按递增排序。这里列表需要遍历,时链表找到第一个比列表小的数。

                     2.把列表中的数转换成链表形式存储。

          注意:新建的链表尾部的next不要忘记置空。

    代码如下:

    class Solution {
        public ListNode sortList(ListNode head) {
            if(head==null||head.next==null)
                  return head;
            List<ListNode> list=new ArrayList<ListNode>();//定义一个链表
            int flag=0;
            while(head!=null)//遍历链表
            {
                 flag=0;
                for(int i=0;i<list.size();i++)//遍历列表,找出列表中第一个比链表中大的数
                {
                    if(head.val<list.get(i).val)//比较大小
                    {
                        list.add(i,head);//把数加入到列表中,列表中后面的数自动向后移动
                        head=head.next;
                        flag=1;
                        break;
                    }
                }
                if(flag==0)//没有比列表中中的数小,说明当前链表中的数时列表中最大的数,直接加到列表的最后
                {
                    list.add(head);
                    head=head.next;
                }
    
            }
    
            ListNode newhead=new ListNode(0);//新建一个链表
            ListNode relist=newhead;
           for(int j=0;j<list.size();j++)//把列表中的节点加入到链表中
           {
             relist.next=list.get(j);
             relist=relist.next;
           }
            relist.next=null;   
           return newhead.next; 
           
        }
    }

           

                     

  • 相关阅读:
    二维数组求矩形最大子数组和
    关于返回一个整数数组中最大子数组的和的问题(详细版)
    学习进度第三周
    人月神话阅读笔记03
    团队开发项目-NABCD模型
    第七周学习总结
    人月神话阅读笔记01
    第六周学习总结
    大道至简阅读笔记03
    结对开发地铁查询
  • 原文地址:https://www.cnblogs.com/ping2yingshi/p/12769166.html
Copyright © 2020-2023  润新知