版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/moses1213/article/details/52098502
由于链表的特殊性,只存在后向指针,所有的数只能向后移动,所以采用冒泡排序时先把最大的数交换到最后,然后第二大的数交换到倒数第二个结点上,注意每次交换的边界的更新。
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;
}
}