突发奇想关于链表的衍生问题
下面两个函数将结构体数组s[]连接成为链表。除了红色字体外,其余都相同。红色字体内,区别只是分别p与p->next两者赋值,为什么后者能连接成完整链表而前者不行。
有哪些要语法束缚着?
struct studentNode *CreateLinkList(struct student s[], int n)
{
struct studentNode *head=null,*p=null;
head=(studentNode *)malloc(sizeof(struct studentNode));
if(n<1)return null;
head->birth=s[0].birth;
for(int j=0;j<10;j++)
head->name[j]=s[0].name[j];
p=head;
for(int i=1;i<n;i++)
{
p->next=(struct studentNode *)malloc(sizeof(studentNode));
p->next->birth=s[i].birth;
for(int j=0;j<10;j++)
p->next->name[j]=s[i].name[j];
p=p->next;
}
p->next=null;
return head;
}
正确
struct studentNode *CreateLinkList(struct student s[], int n)
{
struct studentNode *head=null,*p=null;
head=(studentNode *)malloc(sizeof(struct studentNode));
if(n<1)return null;
head->birth=s[0].birth;
for(int j=0;j<10;j++)
head->name[j]=s[0].name[j];
p=head->next;
for(int i=1;i<n;i++)
{
p=(struct studentNode *)malloc(sizeof(studentNode));
p->birth=s[i].birth;
for(int j=0;j<10;j++)
p->name[j]=s[i].name[j];
p=p->next;
}
p=null;
return head;
}
错误