147.Insertion Sort List---链表排序(直接插入)

题目链接

题目大意:对链表进行插入排序。

解法:直接插入排序。代码如下(耗时40ms):

 1     public ListNode insertionSortList(ListNode head) {
 2         ListNode first = new ListNode(0);
 3         ListNode pre = first, cur = head, post = null;
 4         while(cur != null) {
 5             //保存cur.next,因为要遍历当前结点,下一次就要遍历当前结点的下一个结点,所以在这次遍历完之后需要重新赋值cur=post
 6             post = cur.next;
 7             //寻找可以插入的结点位置
 8             while(pre.next != null && pre.next.val < cur.val) {
 9                 pre = pre.next;
10             }
11             //找到之后,将cur结点插入在pre和pre.next之间
12             cur.next = pre.next;
13             pre.next = cur;
14             //下一次pre再从头开始找可插入的结点位置,所以要置为开始头节点
15             pre = first;
16             //下一次对cur.next结点进行排序,所以要将cur置回
17             cur = post;
18         }
19         return first.next;
20     }
View Code
原文地址:https://www.cnblogs.com/cing/p/8714983.html