这里的链表排序其实比较简单,
就是从原链表中取出链首节点,
按照排序规则(从小到大)插入到新的链表中。
最后将链表的头指针指向新链表的头指针。
源代码:
ListNode.h
void Sort(); // 排序(从小到大)
ListNode.cpp
void MyList::Sort()
{
if (NULL == m_pHead || NULL == m_pHead->pNext)
return;
ListNode* pNewHead = NULL;
// pCur, pNext指向原链表
ListNode* pCur = NULL;
ListNode* pNext = m_pHead;
// 每次从原链表中取出链首指针
// 插入到新链表中
while (pNext != NULL)
{
pCur = pNext;
pNext = pNext->pNext;
// 新链表为空时直接插入
if (NULL == pNewHead)
{
pCur->pNext = NULL;
pNewHead = pCur;
continue;
}
// 在新链表头插入
if (pCur->nData < pNewHead->nData)
{
pCur->pNext = pNewHead;
pNewHead = pCur;
continue;
}
// 在新链表中寻找合适位置插入
ListNode* pNewCur = pNewHead->pNext;
ListNode* pNewPrev = pNewHead;
while (pNewCur != NULL && pNewCur->nData <= pCur->nData)
{
pNewCur = pNewCur->pNext;
pNewPrev = pNewPrev->pNext;
}
// 在新链表链尾插入
if (NULL == pNewCur)
{
pNewPrev->pNext = pCur;
pCur->pNext = NULL;
}
else
{
pCur->pNext = pNewCur;
pNewPrev->pNext = pCur;
}
}
m_pHead = pNewHead;
}