链表与功能

时间:2013-03-11 13:37:24

标签: c singly-linked-list

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

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

2 个答案:

答案 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_liststart中的main无关。由于两者都是各自功能的本地,因此人们甚至看不到另一个。因此,如果愿意,设置start实际上并未设置start。 :P

您需要将start置于函数之外并使其成为全局函数,或者将&start(作为node**)从main传递到{{1}并修改Create_list以设置列表头。 (后者通常更可取,因为全局变量通常很难等待发生。)