题目:
Sort a linked list using insertion sort.
题解:
插入排序就是先对一部分进行排序 排序好后将未排序的插入到已经排序好的队列中 在插入的时候 如果是数组的话可以从前往后 也可以从后往前 对于链表就只能是前者了
代码:
public static ListNode insertionSortList(ListNode head) {
ListNode fakeNode=new ListNode(-1);
fakeNode.next=head;
if(head==null)
return null;
ListNode cur=head.next;//从第二个节点开始遍历
ListNode pre=head;//排好序的最后一个节点
while(cur!=null)
{
if(cur.val<pre.val)
{
ListNode nextNode=cur.next;//保存下一个需要遍历的节点
//寻找插入的合适位置
ListNode cur2=fakeNode.next;
ListNode temp=fakeNode;//记录cur2前面一个节点
while(cur.val>cur2.val&&cur2!=pre)
{
temp=cur2;
cur2=cur2.next;
}
//进行插入
temp.next=cur;
cur.next=cur2;
pre.next=nextNode;
//继续遍历下一个节点
cur=nextNode;
}
else {
pre=cur;
cur=cur.next;
}
}
return fakeNode.next;
}