0

我正在尝试创建一个创建和显示链接列表的程序。

现在我的 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");
    }
}                     
4

2 回答 2

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;
}
}
于 2013-03-11T13:43:28.327 回答
0

startin与inCreate_list无关。由于两者都是各自功能的本地,因此一个甚至看不到另一个。因此,如果您愿意,设置实际上并没有设置。:Pstartmainstartstart

您需要将start函数带出并使其成为全局函数,或者将&start(作为 a node**main传入Create_list并修改*start以设置列表头。(后者通常更可取,因为全局变量通常很难等待发生。)

于 2013-03-11T13:41:59.927 回答