leetcode经典例题第五题,指定用插入排序对链表进行排序。
题目描述
Sort a linked list using insertion sort.
解题思路
解题思路就是根据插入排序的思想,每次遍历都保证前n个数都是排好序的,那么按照原生的插入排序,是从当前元素前一个元素开始一个一个往前判断,只要比前面元素小,则往前移动,一直移动到有一个元素小于它或者移动到头部了则停止,这个位置就是当前元素在这一趟中应该在的位置。但是链表中不好往前移,只能每次都从头部开始往后判断,一直找到第一个比当前元素大的元素停止,然后调整一下指针,就是让当前元素插入到本趟合适的位置。由于有可能要与第一个元素交换,所以搞一个虚拟头节点处理起来会简单一点。
代码提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| class Solution { public ListNode insertionSortList(ListNode head) { if(head == null || head.next == null){ return head; } ListNode dummy = new ListNode(0); ListNode curr = head; while(curr != null){ ListNode pre = dummy; ListNode next = curr.next; while(pre.next != null && pre.next.val < curr.val){ pre = pre.next; } curr.next = pre.next; pre.next = curr; curr = next; } return dummy.next; } }
|