链接列表追加功能在开头添加一个额外的空节点

时间:2017-05-11 14:17:23

标签: c linked-list

            struct node{

                char name[50];
                double grade;
                struct node* next;


            };





            void append(struct node* root){

                int n;

                printf("Enter the number of students: ");
                scanf("%d",&n);

                while(n !=0){

                    struct node* temp;

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

                    printf("\nEnter the name of the student: ");
                    scanf("%s",&temp->name);
                    printf("\nEnter the grade for the student named %s: ",temp->name);
                    scanf("%f",&temp->grade);
                    temp->next=NULL;

                    if(root==NULL){
                       root=temp;
                    }else{
                        struct node* iterate=root;

                        while(iterate->next != NULL){

                            iterate=iterate->next;
                        }

                        iterate->next=temp;

                    }

                n--;
                }


            }

int listLength(struct node* root){

    struct node* temp = root;
    int counter=0;

    while(temp !=NULL){

        counter++;
        temp=temp->next;
    }

    return counter;

}

      int main()
        {
            struct node* root = NULL;

            append(&root);
            //printList(&root);
            printf("Node length: %d",listLength(&root));
            return 0;
        }

到目前为止,我正在开始使用链接列表。我试图这样做,所以我可以使用该功能附加到多个链接列表。所以我只是在main中创建一个不同的根指针,并用它作为参数来调用append函数来添加节点。

这似乎有效,但是,它在列表的开头添加了一个额外的空节点。此节点不包含任何数据。因此,例如,如果我将4个学生添加到列表中,则nodeLength函数将返回5。

1 个答案:

答案 0 :(得分:2)

改变这个:

void append(struct node* root)

到此:

void append(struct node** root)

这样即使append()终止,您也可以进行更改。

当然,您必须在该函数的正文中使用*root而不是root

PS:Do I cast the result of malloc?没有。