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。
答案 0 :(得分:2)
改变这个:
void append(struct node* root)
到此:
void append(struct node** root)
这样即使append()
终止,您也可以进行更改。
当然,您必须在该函数的正文中使用*root
而不是root
。