不显示链接列表中节点附加的结果

时间:2012-06-09 16:06:12

标签: c linked-list

我写了一个代码来附加节点,如果是空的话。 我认为我的代码和逻辑是正确的,但我仍然无法得到任何答案。它的编译但在运行后没有显示任何结果。请告诉我原因

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

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

void append(struct node *,int);
void display(struct node*);

void append( struct node *q, int num )
{
    struct node *temp,*r;
    if(q == NULL)
    {
        temp = (struct node*)malloc(sizeof(struct node));
        temp -> data = num;
        temp -> nxt = NULL;
        q = temp;
    }
    else
    {
        temp = q;
        while(temp->nxt != NULL)
        {
            temp = temp->nxt;
        }
        r = (struct node*)malloc(sizeof(struct node));
        r -> data = num;
        r -> nxt = NULL;
        temp->nxt = r;
    }
}

void display(struct node *q)
{
    while(q != NULL)
    {
        printf("%d",q->data);
        q = q->nxt;
    }
}


int main()
{
    struct node *a;
    a= NULL;
    append(a,10);
    append(a,11);
    append(a,12);
    display(a);
    return 0;
}

2 个答案:

答案 0 :(得分:1)

您需要按地址将第一个参数(列表头)的地址传递给append方法。如上所述,它在第一次调用(以及每次后续调用)中传递NULL,因为它传递了值。

原型看起来应该是这样的:

void append( struct node **q, int num )

然后拨打这样的电话:

append(&a,10);

请注意,需要相应更新函数append以正确处理参数更改。

答案 1 :(得分:1)

追加原型需要改为

void append( struct node **q, int num );

并将a的地址作为&a传递给此函数。这是因为C只支持pass by value。详细了解here

请找到修改后的附加功能,如下所示:

void append( struct node **q, int num ) 
{     
  struct node *temp,*r;     

  if(*q == NULL)     
  {         
     temp = (struct node*)malloc(sizeof(struct node));
     temp -> data = num;
     temp -> nxt = NULL;
     *q = temp;
  }
  else
  {
     temp = *q;
     while(temp->nxt != NULL)
     {
         temp = temp->nxt;
     }
     r = (struct node*)malloc(sizeof(struct node));
     r -> data = num;
     r -> nxt = NULL;
     temp->nxt = r;
 } 
} 

另外:

Chane以下行:

printf("%d",q->data); 

as

printf("%d\n",q->data); 
除非某些终端中有换行符,否则

printf可能无法刷新数据。