题目:
吐槽:直接的想法就是将链表转换成数组,通过插入排序排号序,然后再给链表重新赋值。(letcode不能使用Vector)
代码:
public static ListNode insertionSortList(ListNode head) {
//复制头节点用于赋值和返回
ListNode copy = head;
//1.计算链表长度
int count = 0;
while(head!=null){
head = head.next;
count++;
}
//2.初始化数组,并将链表数值传给数组,以便后续插入排序。
int[] array = new int[count];
count = 0;
head = copy;
while(head!=null){
array[count++] = head.val;
head = head.next;
}
//3.插入排序算法
for(int i =1;i<count;i++){
int j;
int value = array[i];
for(j = i-1;j>=0;j--){
if(array[j]>value){
array[j+1] = array[j];
}else{
break;
}
}
array[j+1] = value;
}
//4.给链表重新赋值
head = copy;
count = 0;
while(head!=null){
head.val = array[count++];
head = head.next;
}
return copy;
//动态数组不让用vector,用vector实现的方法,思路同上
// ListNode copy = head;
// Vector<ListNode> vector = new Vector<>();
// while(head!=null){
// vector.add(head);
// head = head.next;
// }
// for(int i = 1;i< vector.size();i++){
// int j;
// int value = vector.get(i).val;
// for(j =i-1;j>=0;j--){
// if(vector.get(j).val>value){
// vector.get(j+1).val =vector.get(j).val;
// }else{
// break;
// }
// }
// vector.get(j+1).val = value;
// }
// return copy;
}