| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 849 人关注过本帖
标题:链表的指针问题
只看楼主 加入收藏
li384022
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:102
专家分:176
注 册:2017-12-29
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:2 
链表的指针问题
#include "stdlib.h"
#include "stdio.h"
#define NULL 0
#define LEN sizeof(struct student)
struct student
{
 int num;     //学号
 float score;       //分数,其他信息可以继续在下面增加字段
 struct student *next;  //指向下一节点的指针
};
int n; //节点总数
/*
==========================
功能:创建n个节点的链表
返回:指向链表表头的指针
==========================
*/
struct student *Create()
{
 struct student *head;  //头节点
 struct student *p1 = NULL; //p1保存创建的新节点的地址
 struct student *p2 = NULL; //p2保存原链表最后一个节点的地址
 n = 0;   //创建前链表的节点总数为0:空链表
 p1 = (struct student *) malloc (LEN); //开辟一个新节点
 p2 = p1;   //如果节点开辟成功,则p2先把它的指针保存下来以备后用
 if(p1==NULL)  //节点开辟不成功
 {
  printf ("\nCann't create it, try it again in a moment!\n");
  return NULL;
 }
 else    //节点开辟成功
 {
  head = NULL;  //开始head指向NULL
  printf ("Please input %d node -- num,score: ", n + 1);
  scanf ("%d %f", &(p1->num), &(p1->score)); //录入数据
 }
 while(p1->num != 0)  //只要学号不为0,就继续录入下一个节点
 {
  n += 1;   //节点总数增加1个
  if(n == 1)  //如果节点总数是1,则head指向刚创建的节点p1
  {
   head = p1;
   p2->next = NULL;  //此时的p2就是p1,也就是p1->next指向NULL。
  }
  else
  {
   p2->next = p1; //指向上次下面刚刚开辟的新节点                             我不明白这一行  上面已经把P1的地址赋值给P2,然后又把P2指向P1  那岂
  }                                                                                                  不是自己指向自己了??
  p2 = p1;   //把p1的地址给p2保留,然后p1产生新的节点
  p1 = (struct student *) malloc (LEN);
  printf ("Please input %d node -- num,score: ", n + 1);
  scanf ("%d %f", &(p1->num), &(p1->score));
 }
 p2->next = NULL;  //此句就是根据单向链表的最后一个节点要指向NULL
 free(p1);   //p1->num为0的时候跳出了while循环,并且释放p1
 p1 = NULL;   //特别不要忘记把释放的变量清空置为NULL,否则就变成"野指针",即地址不确定的指针
 return head;     //返回创建链表的头指针
}
搜索更多相关主题的帖子: 链表 NULL struct student 节点 
2018-01-09 10:56
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
收藏
得分:20 
后面那句
p1 = (struct student *) malloc (LEN);
会比p2->next = p1先执行
2018-01-09 11:50
li384022
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:102
专家分:176
注 册:2017-12-29
收藏
得分:0 
回复 2楼 yangfrancis
哦哦     thanks
2018-01-09 11:55
快速回复:链表的指针问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014152 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved