题目描述:
有一个带头结点的单链表L,设计一个算法使其元素递增有序
算法思想:
类似于直接插入排序。找到要插入的位置。只是直接插入排序是从后往前找要插入的位置,这里的单链表只能从前往后找要插入的位置。
原序列:L->1->4->2->3->6
L->1->NULL
若排序到这一步:
L->1->2->4 待插入3
pre p q r
L-> 1-> 2-> 4 3->6
pre p q r
L-> 1-> 2-> 4 3->6
pre p q
L-> 1-> 2-> 3->4 3
每次pre和p都得从头出发
核心代码:
void SortList(LNode* &L)
{
LNode* q=L->next->next;
L->next->next=NULL;
while(q!=NULL)
{
LNode* r=q->next;
LNode* pre=L;
LNode* p=L->next;
while(p&&p->data<q->data)//这里要加一个p!=NULL才行
//还有一个细节:p!=NULL要放在前面。
//不然的话如果p为空了,p->data<q->data就会报错
//1->2->3 4
{
pre=p;
p=p->next;
}
q->next=p;
pre->next=q;
q=r;
}
}
细节高亮:先判断p是否为空
while(p&&p->data<q->data)
//这里要加一个p!=NULL才行
//还有一个细节:p!=NULL要放在前面。
//不然的话如果p为空了,p->data<q->data就会报错
//1->2->3 4