回复 9楼 yangfrancis
if(i==0){
head=p;
p=head->next;
}
else p=p->next;
//这个地方在上面赋值后,用p=p->next来用p指向原来的p中的next,在循环头给新p分配内存,有进行赋值与分配内存吧
struct studentNode *CreateLinkList(struct student s[], int n) /以下为把结构体数组链接成一串链表的函数,结构体数组s[]已知/ { struct studentNode *head,*p; if(n==0)return null; for(int i=0;i<n;i++) { p=(studentNode *)malloc(sizeof(struct studentNode)); for(int j=0;j<10;j++) /从这里把结构体数组各成员放进链表的各个结点/ p->name[j]=s[i].name[j]; p->birth=s[i].birth; /到这里单个结构体的成员全部放入一节点/ if(i==0) { head=p; /可能是这个地方有问题,我想把各个节点连接起来,但没有连接成,我看不出哪里出问题/ } p=p->next;/*这句赋值的意义是把p->next指针所指位置上的数据赋值给p.前面你对p->name p->birth都有赋值初始化,唯独没有对p->next赋值,也就是说此时p->next上保存的数据是随机的。我们的目的是要往p->next写入一个struct studentNode结构体变量的地址(指针)信息。*/ } p=null; return head; }
struct studentNode *CreateLinkList(struct student s[], int n) /以下为把结构体数组链接成一串链表的函数,结构体数组s[]已知/ { struct studentNode *head=NULL,**p=NULL; /*声明一个指针,他是指向{结构体指针}的指针*/ if(n==0)return null; for(int i=0;i<n;i++) { *p=(studentNode *)malloc(sizeof(struct studentNode));/*通过*p来往p->next写入数据*/ for(int j=0;j<10;j++) *p->name[j]=s[i].name[j]; *p->birth=s[i].birth; if(i==0) { head=*p; } p=&p->next;/*把p->next的地址保存到p上。*/ } *p=null;/*把链表的最后一个结点的->next赋值为NULL*/ return head; }
struct studentNode *CreateLinkList(struct student s[], int n) /以下为把结构体数组链接成一串链表的函数,结构体数组s[]已知/ { if(n==0)return null; struct studentNode *head=(studentNode *)malloc(sizeof(struct studentNode)); for(int j=0;j<10;j++) head->name[j]=s[i].name[j]; head->birth=s[i].birth; struct studentNode*p=head; for(int i=1;i<n;i++) { p->next=(studentNode *)malloc(sizeof(struct studentNode)); for(int j=0;j<10;j++) p->next->name[j]=s[i].name[j]; p->next->birth=s[i].birth; p=p->next; } p->next=null; return head; }
[此贴子已经被作者于2018-1-8 14:33编辑过]