链表排序

来源:互联网 发布:澳门导航软件 编辑:程序博客网 时间:2024/06/10 19:56

这里的链表排序其实比较简单,

就是从原链表中取出链首节点,

按照排序规则(从小到大)插入到新的链表中。

最后将链表的头指针指向新链表的头指针。

源代码:

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;}


0 0
原创粉丝点击