//简单单链表排序 : 插入排序
ListNode* ListSort(ListNode* head)
{
if(head == NULL) return NULL;
ListNode *curNode = NULL,*preNode=NULL,*nextNode=NULL,*node = NULL;
curNode = head->next;
head->next = NULL;
while(curNode)//当前要插入的节点
{
node = curNode->next;//保存下一个节点
if(curNode->value < head->value)//比头结点还小,则成为新的头结点
{
curNode->next = head;
head = curNode;
}
else
{
preNode = head, nextNode = head->next;
while(nextNode && nextNode->value<curNode->value)//找到合适位置
{
preNode = nextNode;
nextNode = nextNode->next;
}
curNode->next = preNode->next;
preNode->next = curNode;
}
curNode = node;
}
return head;//返回新的头结点
}
简单测试:
const int N = 10;
string tmp[N]= {"9","3","7","8","1","5","4","0","2","6"};
ListNode* root = new ListNode;
root->value = tmp[0];
ListNode* cur = root,*loopNode = NULL;
int i = 1;
while(i < N)
{
InsertAfter(cur,tmp[i]);
cur = cur->next;
++i;
}
PrintList(root);
root = ListSort(root);
PrintList(root);