4.12
真的快被这题弄疯了。
坐了好久。
思路一直不清,一直死循环,或者是错误。
应该将排序好的部分和未排序的部分区分出来,这样就比较容易实现。
/**
* Definition for ListNode.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int val) {
* this.val = val;
* this.next = null;
* }
* }
*/
public class Solution {
/**
* @param head: The first node of linked list.
* @return: The head of linked list.
*/
public static ListNode insertionSortList(ListNode head) {
if(head == null || head.next == null){
return head;
}
ListNode flag = head.next;
head.next = null;
ListNode flag_tmp = head;
//ListNode tmp = head;
ListNode p = head;
while(flag != null){
flag_tmp = flag;
flag = flag.next;
flag_tmp.next = null;
// 如果小于首元素的值;
if(flag_tmp.val < head.val){
flag_tmp.next = head;
head = flag_tmp;
continue;
}
p = head;
while(p.next != null){
if(flag_tmp.val >= p.val && flag_tmp.val < p.next.val ){
flag_tmp.next = p.next;
p.next = flag_tmp;
break;
}
p = p.next;
}
if(p.next == null){
p.next = flag_tmp;
}
}
return head;
// write your code here
}
}