在链表

时间:2017-03-29 19:02:36

标签: c linked-list

我想插入我的链表。以下是我为此写的内容:

#include <stdio.h>
#include <stdlib.h>


struct node
{
    int data;
    struct node *next;
};


void show_menu()
{
    printf("\nWhat do you want to do: \n");
    printf("1.Insert \n2.Delete \n3.Show"); 
    printf("\nEnter your choice: \n");
}

void insert(struct node *head)
{
    int new_numer;
    printf("Enter a number to insert in the linked list: \n");
    scanf("%d",&new_numer);

    if ( head == NULL )
    {
        head = (struct node *)malloc(sizeof(struct node));
        head->data = new_numer;
        head->next = NULL;
    }
    else
    {
        struct node *temp = head;

        struct node *new_node = (struct node *)malloc(sizeof(struct node));

        new_node -> data = new_numer;

        new_node -> next = NULL;

        while( temp -> next != NULL )
        {
            temp = temp -> next;
        }
        temp->next = new_node;
    }
}


void show(struct node *head)
{
    printf("\n The elements in the list are: \n");
    while ( head != NULL )
    {
        printf("%d\n", head->data);
        head = head -> next;
    }
}


int main(int argc, char const *argv[])
{
    int choice;

    struct node *head = NULL;


    while(1)
    {
        show_menu();
        scanf("%d",&choice);

        switch(choice)
        {
            case 1:
                insert(head);
                show(head);
            break;

            case 2:
                show(head);
            break;

            case 3:
            break;

            default:
                printf("Don't fuck with me.\n");
        }

    }


    return 0;
}

在运行代码时,我得到了:

What do you want to do: 
1.Insert 
2.Delete 
3.Show
Enter your choice: 
1
Enter a number to insert in the linked list: 
12

 The elements in the list are: 

What do you want to do: 
1.Insert 
2.Delete 
3.Show
Enter your choice: 

为什么列表中没有插入元素?

如果我要搬家

head = (struct node *)malloc(sizeof(struct node));

到main函数,我得到第一个元素为零,其他插入。

我在这里缺少什么?

2 个答案:

答案 0 :(得分:2)

您遇到的问题是,当您插入第一个元素时,头部不会改变。您已将其值传递给函数。

您需要做的是传递头部的地址,即struct node** head,然后修改*head,如果它是第一个被插入的元素。

答案 1 :(得分:0)

每当您想要更改传递给函数的某个变量的值时,您需要通过引用传递或使用变量的指针。这里的情况也是如此。函数insert更改变量head的值,这是一个指针。所以你必须传递指针的指针。

因此,参数必须为struct node **head,并且main()函数将&head传递给insert()