c语言链表里的一段代码的含义
- 提问者网友:一抹荒凉废墟
- 2021-02-19 15:35
pTail->pNext = pNew;
pNew->pNext = NULL;
pTail = pNew;
这是创建链表最核心的一个步骤,当初讲的时候我还是理解的,好久不用再看就忘了。。虽然已经背下来了不过还是希望能够深刻的理解心理比较舒服
这里
pNew->data = val;
pNew->pNext = NULL;
pTail = pNew;
我觉得和正常的意思是一样的了,不过我运行了下不能输出链表,所以pTail->pNext=pnew是必不可少的,但是我又看不出他的意义所在,归根结底还是我对指针的认识不够透彻,因为创建链表前边肯定有个pTail = pHead,不过因为是pTail在前面所以也影响不到pHead,而最下边的返回值是return pHead,这也是我不理解的一点,请大神帮忙疏通下思路
我思考了下大概理解的,不知道是不是也可以这样写
pNew->data = val;
pTail->pNext = pNew;
pTail = pTail->Next;
pTail->next = NULL;
- 五星知识达人网友:掌灯师
- 2021-02-19 16:25
pNew->pNext = NULL;
pTail = pNew;
这个是新创建的节点,将val赋值给节点的data~
然后将新节点的next指向一个空~防止野指针
接下来的就是把Ptail指向新节点,代表这个是尾节点已经到了pNew的位置~
pTail->pNext=pnew这句话其实是将尾节点的next指向pNew的地址,实现链表的链接~
你修改之后
pTail = pTail->Next;这句话我表示不是很懂~是不是写错了~为什么要把尾指针的next指向尾指针?????
你是不是想写将尾指针移到新创建的指针上去,那应该是这样写pTail = pNew;
- 1楼网友:孤老序
- 2021-02-19 18:01
#include "stdio.h" #include "stdlib.h"
struct student{ char name[20]; int num; float chengji[3]; char level[3]; struct student *next; } *head ; typedef struct student stu;
void input() //输入功能 { char ch; struct student *p1,*p2;
file *fp;
head=null; do { p1=(struct student *)malloc(sizeof(stu)); if (head==null) head=p1,p2=p1; else p2->next=p1; printf("请输入姓名:\n"); scanf("%s",p1->name); printf("请输入学号:\n"); scanf("%d",&p1->num); fflush(stdin); printf("请输入网络成绩\n"); scanf("%f",&p1->chengji[0]); printf("请输入c语言成绩:\n"); scanf("%f",&p1->chengji[1]); printf("请输入英语成绩:\n"); scanf("%f",&p1->chengji[2]); p1->next=null; printf("是否继续输入y/n\n"); fflush(stdin); ch=getchar(); fflush(stdin); }while(ch=='y'||ch=='y');
if((fp=fopen("file.dat","ab"))==null) return; //fp=fopen("file.dat","wb"); while(head!=null) { fwrite(head,sizeof(stu),1,fp); head=head->next; } fclose(fp); } void main() { input(); }
vc6通过