由於鏈表的特殊性,只存在後向指針,所有的數只能向後移動,所以採用冒泡排序時先把最大的數交換到最後,然後第二大的數交換到倒數第二個結點上,注意每次交換的邊界的更新。
void ListSort(ListNode* pHead)
{
if(pHead == NULL)
return;
ListNode *pEnd, *pNode;
pEnd = NULL;
while(pEnd != pHead)
{
for(pNode = pHead; pNode->m_pNext != pEnd; pNode = pNode->m_pNext)
{
if(pNode->m_nValue > (pNode->m_pNext->m_nValue))
{
int tmp = pNode->m_nValue;
pNode->m_nValue = pNode->m_pNext->m_nValue;
pNode->m_pNext->m_nValue = tmp;
}
}
pEnd = pNode;
}
}