27、【連結串列】按遞增次序輸出單鏈表(C++版)
阿新 • • 發佈:2021-01-22
題目描述
題目分析
按遞增次序輸出,需要三個關鍵步驟,第一步是初始化後查詢到最小值,第二步是刪除,第三步進行下一輪的初始化迭代。
程式碼實現
首先,遍歷查詢最小值,設定一個結點p和其前驅節點pre,先從頭結點後的第一個結點開始依次比較大小,pre指向第一個結點,p指向下一個節點,p不斷往後走,若後續結點有更小的值,便將此時的p賦值給pre,知道遍歷完p位置。
然後,刪除最小值結點,使用一個結點變數t進行實現。
最後,再進行初始化,再從頭開始依次遍歷,找到最小值,直到刪除完全部L中結點為止。
/*
typedef struct {
int data;
struct next*;
}LNode, LinkList*;
*/
void PrintMinSort(LinkList &L){
LNode *pre,*p,*t;
while(head->next != NULL){
pre = head;
p = head->next;
while(p!=NULL){
if(pre->next->data > p->next->data)
pre = p;
p = p->next;
}
std::cout << pre->next->data << std::endl;
t = pre- >next;
pre->next = t->next;
free(t);
}
free(head);
}
時間複雜度為O(n2),空間複雜度為O(1)。