题目描述
题目分析
按递增次序输出,需要三个关键步骤,第一步是初始化后查找到最小值,第二步是删除,第三步进行下一轮的初始化迭代。
代码实现
首先,遍历查找最小值,设置一个结点p和其前驱节点pre,先从头结点后的第一个结点开始依次比较大小,pre指向第一个结点,p指向下一个节点,p不断往后走,若后续结点有更小的值,便将此时的p赋值给pre,知道遍历完p位置。
然后,删除最小值结点,使用一个结点变量t进行实现。
最后,再进行初始化,再从头开始依次遍历,找到最小值,直到删除完全部L中结点为止。
/*
typedef struct {
int data;
struct next*;
}LNode, LinkList*;
*/
void PrintMinSort(LinkList &head){
LNode *pre,*p,*t;
while(head->next != NULL){
pre = head;
p = head->next;
while(p->next != 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)。