p2是一个只分配过一次内存的存储空间,每次都把p1往p2里写不会覆盖吗?
p2不是只在循环体前分配过一次内存吗?第二次赋值后为什么没有覆盖掉之前的节点?我脑袋有点转不过来
p2不是只在循环体前分配过一次内存吗?第二次赋值后为什么没有覆盖掉之前的节点?我脑袋有点转不过来
2015-12-03
//动态链表 同样具有头指针 每个节点包含数据和指向下一个节点的指针 #include<stdio.h> #include<malloc.h> struct weapon { int price; int atk; struct weapon * next; // 定义链表结构体 这行是指针 }; struct weapon * create(){ //创建链表的函数 struct weapon *head; //头指针 struct weapon *p1, *p2; //两个指针变量 一个指向新创的 一个指向上一个节点 int n=0; //计算节点个数 p1=p2=(struct weapon *)malloc(sizeof(struct weapon)); //malloc 分配内存块的函数 sizeof 判断数据类型长度符 scanf("%d,%d",&p1->price,&p1->atk); //输入数据到第一个节点 head=NULL; //初值置空 while(p1->price!=0){ //判断输入结束条件 n++; if(n==1) head=p1; //第一个节点让head指向这个节点 else p2->next = p1; //如果不是第一个节点 让上一个节点的next指向新节点 p2=p1; //每一次把新节点保存到p2 p1=(struct weapon *)malloc(sizeof(struct weapon)); //给p1重新分配空内存块 scanf("%d,%d",&p1->price,&p1->atk); //继续往p1写入数据 (从else开始执行) } p2->next = NULL; //写入完成后给最后一个节点的指向赋空 return (head); } int main(){ return 0; }
举报