题目
给你链表的头结点
head
,请将其按 升序 排列并返回 排序后的链表 。
解题思路
- 先将链表各节点之间的联系断开然后再进行排序;
- 通过List存放节点,对List按照节点的值进行排序;
- 遍历List重新建立联系。
代码展示
class Solution { public ListNode sortList(ListNode head) { if(head == null){ return null; } List<ListNode> list = new ArrayList<>(); while (head != null){ //创建临时节点存放下一个节点 ListNode node = head.next; //将当前节点与下一个节点断开连接,再存放到List中,避免产生循环 head.next = null; list.add(head); head = node; } //对list进行升序排序 list.sort(new Comparator<ListNode>() { @Override public int compare(ListNode o1, ListNode o2) { return o1.val - o2.val; } }); for (int i = 1; i < list.size(); i++){ list.get(i - 1).next = list.get(i); } return list.get(0); } }