/*链表排序:冒泡*/
single_list_node* SortList(single_list_node* head)
{
single_list_node *p = NULL, *p_left = NULL, *p_right = NULL;
single_list_node *tmp = NULL, *prev = NULL;
p_left = head;
if(head == NULL)
{
return NULL;
}
p = head->next;
p_left->next = NULL;
/*p_left指向已拍好序的链表的头结点
p_right指向还没排序的头节点
p是从未排序的链表的头部取下来,即将有序插入已排好序的p_left指向的链表*/
while(p != NULL)
{
p_right = p->next;
tmp = p_left;
/*tmp遍历已排好序的链表,找p的data应该放的位置
prev是最终p的前驱,tmp是p的后继*/
prev = NULL;
while(tmp != NULL && tmp->data < p->data)
{
prev = tmp;
tmp = tmp->next;
}
//比已排好序的链表的第一个元素还小,头插
if(NULL == prev)
{
p->next = p_left;
p_left = p;
p = p_right;
continue;
}
prev->next = p;
p->next = tmp;
p = p_right;
}
return p_left;
}