/*
删除带头节点的链表的最小值
*/
#include "stdio.h"
#include "malloc.h"
struct student{
int data;
struct student *next;
};
struct student *createList(){
struct student *head;
struct student *p;
struct student *q;
int data;
head=(struct student *)malloc(sizeof(struct student));
head->next=NULL;
q=head;
scanf("%d",&data);
while(data!=0){
p=(struct student *)malloc(sizeof(struct student));
p->data=data;
p->next=q->next;
q->next=p;
q=q->next;
scanf("%d",&data);
}
return head;
}
void printList(struct student *head){
struct student *phead;
phead=head->next;
while(phead!=NULL){
printf("%4d",phead->data);
phead=phead->next;
}
printf("\n");
}
void delMinList(struct student *head){
struct student *p = NULL;
struct student *prep = NULL;
struct student *q = NULL;
struct student *preq = NULL;
int minData =100;
preq = head;
q = head->next;
if (q == NULL) {
printf("List is empty.\n");
return;
}
q->data=minData;
prep = head;
p = q;
while (q != NULL) {
if (q->data < minData) {
minData = q->data;
prep = preq;
p = q;
}
preq = preq->next;
q = q->next;
}
if (p != NULL) {
prep->next = p->next;
free(p);
printf("Minimum value %d deleted.\n", minData);
} else {
printf("Minimum value not found.\n");
}
}
main(){
struct student *head;
head=createList();
printList(head);
delMinList(head);
printList(head);
}
1 3 5 0
1 3 5
Minimum value not found.
1 3 5