算法思想:对链表进行遍历,每次遍历找出整个链表的最小值 输出并释放结点所占的空间,再次查找最小值元素,输出并释放空间,直到链表为空最后释放头结点
#include<stdio.h>
#include<stdlib.h>
typedef struct lnode{
int data;
struct lnode *next;
}lnode,*LinkList;
int a[10]={4,2,3,1,8};
int n=5;
void InitList(LinkList &L){
L=(LinkList)malloc(sizeof(lnode));
lnode *s,*r=L;
for(int i=0;i<n;i++){
s=(lnode *)malloc(sizeof(lnode));
s->data=a[i];
r->next=s;
r=s;
}
r->next=NULL;
}
void deleteMin(LinkList &head){
while(head->next!=NULL){//外层循环判断总共要循环多少次
lnode *pre=head;//pre为前驱
lnode *p=pre->next;//p为工作指针
while(p->next!=NULL){//内层循环来判断最小的元素结点的位置,删掉后后面循环次数减少
if(p->next->data<pre->next->data){
pre=p;
}
p=p->next; //注意这里不论有没有找到,p都要向后移动
}
printf("%d",pre->next->data);
lnode *q=pre->next;
pre->next=q->next;
free(q);
}
free(head);
}
int main(){
LinkList head;
InitList(head);
deleteMin(head);
return 0;
}