C++實現(xiàn)單鏈表按k值重新排序的方法
更新時間:2017年05月08日 11:55:58 作者:難免有錯_
這篇文章主要介紹了C++實現(xiàn)單鏈表按k值重新排序的方法,結(jié)合實例形式分析了C++單鏈表中按照給定值進行判斷與排序的相關操作技巧,需要的朋友可以參考下
本文實例講述了C++實現(xiàn)單鏈表按k值重新排序的方法。分享給大家供大家參考,具體如下:
題目要求:
給定一鏈表頭節(jié)點,節(jié)點值類型是整型。
現(xiàn)給一整數(shù)k,根據(jù)k將鏈表排序為小于k,等于k,大于k的一個鏈表。
對某部分內(nèi)的節(jié)點順序不做要求。
算法思路分析及代碼(C)
思路:將鏈表分為小于k、等于k、大于k的三個鏈表,然后再合并。
鏈表結(jié)點定義:
typedef struct Node
{
int data;
struct Node* next;
}node, *pNode;
算法代碼:
pNode sortLinkedList(pNode head, int k)
{
pNode sHead = NULL;//小頭
pNode sTail = NULL;//小尾
pNode eHead = NULL;//等頭
pNode eTail = NULL;//等尾
pNode bHead = NULL;//大頭
pNode bTail = NULL;//大尾
pNode temp = NULL;
//拆分鏈表
while (head != NULL)
{
temp = head->next;
head->next = NULL;
if (head->data < k)
{
if (!sHead){
sHead = head;
sTail = head;
}
else{
sTail->next = head;
sTail = head;
}
}
else if (head->data == k)
{
if (!eHead){
eHead = head;
eTail = head;
}
else{
eTail->next = head;
eTail = head;
}
}
else
{
if (!bHead){
bHead = head;
bTail = head;
}
else{
bTail->next = head;
bTail = head;
}
}
head = temp;
}
//合并鏈表
if (sTail)
{
sTail->next = eHead;
eTail = (eTail == NULL ? sTail : eTail);
}
if (eTail)
{
eTail->next = bHead;
}
return sHead != NULL ? sHead : (eHead != NULL ? eHead : bHead);
}
希望本文所述對大家C++程序設計有所幫助。
相關文章
C++中signed?main和int?main的區(qū)別
這篇文章介紹了C++中signed?main和int?main的區(qū)別,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-12-12
C++非遞歸隊列實現(xiàn)二叉樹的廣度優(yōu)先遍歷
這篇文章主要介紹了C++非遞歸隊列實現(xiàn)二叉樹的廣度優(yōu)先遍歷,實例分析了遍歷二叉樹相關算法技巧,并附帶了兩個相關算法實例,需要的朋友可以參考下2015-07-07

