本文實例講述了C++實現單鏈表按k值重新排序的方法。分享給大家供大家參考,具體如下:
題目要求:
給定一鏈表頭節點,節點值類型是整型。
現給一整數k,根據k將鏈表排序為小于k,等于k,大于k的一個鏈表。
對某部分內的節點順序不做要求。
算法思路分析及代碼(C)
思路:將鏈表分為小于k、等于k、大于k的三個鏈表,然后再合并。
鏈表結點定義:
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++程序設計有所幫助。
新聞熱點
疑難解答
圖片精選