此博客链接: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; } }