当我运行它时,它不报告任何错误,但实际上没有发生任何错误。它不会返回指向列表中最小元素的指针,它只是什么都不做。
用指针指向双重的第一个元素来创建一个函数 链表,返回指向列表中最小元素的指针
#include<stdio.h>
#include<stdlib.h>
typedef struct list DLlist;
struct list{
DLlist *next, *previous;
int number;
};
DLlist *first = NULL;
int n=0;
DLlist* add(DLlist *end, int number){
DLlist* perm;
perm = (DLlist *)malloc(sizeof(DLlist));
perm->number = number;
if(first==NULL){
first = perm;
first->next = NULL;
first->previous = NULL;
end = perm;
}else{
perm->next = NULL;
end->next = perm;
perm->previous = end;
end = perm;
return end;
n++;
}
}
DLlist* return_smallest(DLlist *first){
DLlist *max;
DLlist *current;
first = max;
current = first;
for(int i=0;i<n;i++){
if(current->number < max->number) max = current;
current = current->next;
}
return max;
}
void main(){
DLlist *end = NULL;
int number;
int choice;
do{
printf("1-Add elements to list: \n"
"2-Return a pointer to the smallest element in the list\n");
scanf("%d",&choice);
scanf("%d",&number);
switch(choice){
case 1: end = add(end, number);break;
case 2: printf("%d",(return_smallest(first))->number);
}
}while(choice == 1);
}
答案 0 :(得分:0)
您的end
var在main()
中定义,当您将其传递给add
时,您实际传递了该指针的副本,因此在该函数内所做的更改不会被复制回来到main()
范围内的变量。
c中通常的方法是将其地址(DLlist**
)传递给函数并将其用作双指针,因此更新将能够更新外部变量。
您也可以将end
全局设为first
,但这是一个坏习惯,因为它会阻止同时使用多个列表。最好避免使用全局变量,但它也可以起作用。