我正在尝试创建一个创建和显示链表的程序。
现在我的create_list()函数出现问题,它不会创建任何列表。
我做错了什么?
抱歉英文不好:/
代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
int data;
struct node *next;
} node;
int main(){
node *start;
start = NULL;
int a,n,on = 1;
while(on == 1){
printf(" \n choose: \n 1 --- create list \n 2 --- display list \n");
scanf("%d",&n);
switch(n){
case 1:
printf("-------------------------------------------- \n");
printf(" Enter the elements. The last element is 0 \n");
printf("-------------------------------------------- \n");
Create_list();
Display_list(start);
break;
case 2:
Display_list(start);
break;
}
}
system("pause");
return 0;
}
void Display_list(node *curr){
if(curr){
while (curr->next != NULL){
printf("%d \n",curr->data);
curr=curr->next;
}
} else {
printf(" \n The list is not created ! \n");
}
}
void Create_list(node *curr){
int i;
node *start = NULL;
if (start == NULL){
curr = (node *)malloc(sizeof(node));
start=curr;
while ( i != 0){
scanf("%d",&i);
if(i == 0){
curr->next=NULL;
curr=start;
} else {
curr->data=i;
curr->next=(node *)malloc(sizeof(node));
curr=curr->next;
}
}
} else {
printf(" \n list already exists ! \n");
}
}
答案 0 :(得分:1)
函数Create_List(node * curr)需要一些参数。你没有从main()传递任何参数。您的代码是否已编译?
函数Create_List(node * curr)需要一些参数。你没有从main()传递任何参数。您的代码是否已编译?
你应该做的是在main中取一个节点,它将存储链表的第一个节点的位置。
void Insert(struct node **q, int num) //Num is the data to be added and **q is the pointer to the first node of the list.
{
struct node *temp, *r;
temp = *q;
if (*q == NULL) {
temp = ((struct node *)malloc(sizeof(struct node)));
temp->data = num;
temp->link = NULL;
*q = temp;
}
else {
while (temp->link != NULL)
temp = temp->link;
r = ((struct node *)malloc(sizeof(struct node)));
r->data = num;
r->link = NULL;
temp->link = r;
}
}
答案 1 :(得分:0)
start
中的Create_list
与start
中的main
无关。由于两者都是各自功能的本地,因此人们甚至看不到另一个。因此,如果愿意,设置start
实际上并未设置start
。 :P
您需要将start
置于函数之外并使其成为全局函数,或者将&start
(作为node**
)从main
传递到{{1}并修改Create_list
以设置列表头。 (后者通常更可取,因为全局变量通常很难等待发生。)