问题:Sort a linked list using insertion sort.链表的插入。
这题的考察点:1)插入排序(以某个数为基准,一般是第一个数,将后面的数与它比较,放在前边还是后边。。。。)
2)其次是链表的插入,需要单向的遍历
public ListNode insertionSortList(ListNode head) {
if(head==null||head.next==null)return head;//head为空或只有一个数返回head
int minNum=Integer.MIN_VALUE;//新建一个结点作为头结点,头结点的值为整数的最小值
ListNode p=new ListNode(minNum);
p.next=head;
head=p;
p=p.next;
ListNode q=p.next;//从第二数开始与前边的数比较
ListNode r,rN;//用于遍历前部分排序好的链表,确定q指针所指节点插入的位置,每次都从头结点开始
while(q!=null)
{
r=head;
rN=r.next;
if(q.val<p.val)
{
while(rN!=p && rN.val<=q.val)//rN所指值小于q,r和rN都后移
{
r=rN;
rN=rN.next;
}//跳出循环表示找到了q值插入的位置,并修改相应结点的链接
r.next=q;
q=q.next;
r=r.next;
r.next=rN;
p.next=q;
}else//说明q指针的值小于p,不用修改链接,指针后移
{
p=q;
q=q.next;
}
}
return head.next; //去掉新建的节点,返回head.next
}