求助:建立动态单向链表的问题
1,struct student{2,int num;
3,float score;
4,struct student *next;}
5,struct *p1,*p2;
6,p1=p2=(struct student*)malloc(sizeof(struct student);
7,head=NULL
8,while(p1->num!=0)
9,{n=n+1;
10,if(n==1)head=p1;
11,else p2->next=p1;
12,p2=p1;
13,p1=(struct student*)malloc(sizeof(struct student);
这是一个简略的建立单项链表的语句.在第6行申请了一个空间使p1,p2指向它.第10行使head也指向这个空间.
接着p2->next=p1.这有个疑问?由于还没有申请新的空间11行的语句不就把链表做成了个循环链即链表的尾又指向链表的头.是不是应该把第13行加到11行else后面?
----------------解决方案--------------------------------------------------------
没有错误啊
第一次循环 n=1 执行head=p1 即p1和head指向一个节点 并且为空
p2=p1 即p2和p1和head指向一个节点 都为NULL p1开辟一个空间
第二次循环 n=2 执行p2->next=p1 即把新开辟的空间连接到p2 也就是head的后边
p2=p1 让p2指针指向p1 ,p1继续开辟空间 ,此次循环结束后, 链表为head->p2
第三次循环 n=3 执行p2->next=p1 即把新开辟的空间连接到p2
p2=p1 让p2指针指向p1 ,p1继续开辟空间 ,此次循环结束后, 链表为head->p2->p2'
... ...
其实这里的p2起到连接作用,循环一次它往后走一步... 而p1是赋值开辟空间的
当然整个循环结束后要用这语句完成整个链表的 p2->next=NULL
----------------解决方案--------------------------------------------------------
哦!不好意思.书看多了,发帖时脑子晕了.
----------------解决方案--------------------------------------------------------