如何在c中传递链表到函数



如何将链接列表的头指针传递给函数?我写了2个程序,最后在一个链表中插入10个元素。其中一个运行成功,另一个运行失败。我可以用我的第二个代码找出问题,但是我找不到解决方案。下面是我的代码和它们的输出。

代码1(成功)-

#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
    int item;
    struct node *next;
}snode;
void main()
{
    system("clear");
    snode *head,*p,*new,*last;
    int i;
    last=(snode *)malloc(sizeof(snode));
    head=(snode *)malloc(sizeof(snode));
    head->next=NULL;
    last->next=NULL;
    printf("Enter 10 numbers to be inserted at the endn");
    for(i=0;i<=9;i++)
    {
        new=(snode *)malloc(sizeof(snode));
        scanf("%d",&new->item);
        if(i==0)
        {
            head=last=new;
        }
        else
        {
            last->next=new;
            new->next=NULL;
            last=new;
        }
    }
    p=head;
    printf("Items in the link list are: ");
    while(p!=NULL)
    {
        printf("%d->",p->item);
        p=p->next;
    }
    printf("NULLn");
}
输出——

Enter 10 numbers to be inserted at the end
0 1 2 3 4 5 6 7 8 9 
Items in the link list are: 0->1->2->3->4->5->6->7->8->9->NULL

代码2(失败)-插入函数所做的更改没有反映在main()

#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
    int item;
    struct node *next;
}snode;
void insert(snode *,snode *);
void main()
{
    system("clear");
    snode *head,*p,*last;
    int i;
    last=(snode *)malloc(sizeof(snode));
    head=(snode *)malloc(sizeof(snode));
    (head)->next=NULL;
    (last)->next=NULL;
    insert(head,last);
    p=head;
    printf("Items in the link list are: ");
    while(p!=NULL)
    {
        printf("%d->",p->item);
        p=p->next;
    }
    printf("NULLn");
}
void insert(snode *head,snode *last)
{
    int i;
    snode *new;
    printf("Enter 10 numbers to be inserted at the endn");
    for(i=0;i<=9;i++)
    {
        new=(snode *)malloc(sizeof(snode));
        scanf("%d",&new->item);
        if(i==0)
        {
            head=last=new;
        }
        else
        {
            (last)->next=new;
            new->next=NULL;
            last=new;
        }
    }
}
输出——

Enter 10 numbers to be inserted at the end
0 1 2 3 4 5 6  7 8 9
Items in the link list are: 0->NULL

我知道我应该使用引用调用方法。但是我无法理解我在哪里使用*运算符和&运算符。

你的函数insert通过值获得指针,所以当它修改头时,它修改指针的本地副本。insert不改变您在main中定义的head变量。

你需要把insert改成通过引用来获取指针:

void insert(snode **head, snode **last);

然后在main中传递指针的地址:

insert(&head, &last);

看你的代码,我看到你初始化头和最后malloc-ed结构。你确定你想这样吗?对于空列表,通常设置head=last=NULL。

顺便说一句,您应该使用高警告级别进行编译。这有助于您识别错误。

相关内容

  • 没有找到相关文章

最新更新