永发信息网

c语言链表里的一段代码的含义

答案:2  悬赏:50  手机版
解决时间 2021-02-20 01:23
  • 提问者网友:一抹荒凉废墟
  • 2021-02-19 15:35
pNew->data = val;
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->data = val;
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通过

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯