qq_41096387 2020-03-27 14:46 采纳率: 100%
浏览 140

C语言,经典单向链表代码,求大神答疑

我对这段代码的一部分不懂,请看代码(我不懂的地方我放在注释里面了):

#include <stdio.h>
#include <stdlib.h>
struct node{  
    int data;
    struct node *next;
};

struct node *create()
{
    struct node *head;
    struct node *tail; 
    struct node *p;

    int x=0;
    head=tail=NULL;
    printf("请输入一个整数\n"); 
    scanf("%d",&x);
    while(x!=-1){
        p=(struct node*)malloc(sizeof(struct node));
        p->data = x;
        p->next = NULL;
        if(head==NULL) head=tail=p;
        else{
            tail->next=p;
/* 假设进入第二轮循环,输入了2,那么p->data是2,p->next=NULL;让tail->next=p 就是让tail的成员next指向这个新构建的p  */
            tail = p;
/*这里又让tail=p,那么此时的tail不应该是tail->data = 2; tail->next= NULL了吗?既然tail->next=null了,岂不是让上一个语句的 tail->next=p建立的连接失效了吗?*/ 
        }
        printf("请输入一个整数\n");
        scanf("%d",&x);

    }

    return head;    
}

int main(){
    creat();
    return 0;
} 
  • 写回答

1条回答 默认 最新

  • jianqiang.xue 嵌入式领域优质创作者 2020-03-27 15:58
    关注

    p=(struct node*)malloc(sizeof(struct node));//每次执行这个就已经是新的空间了
    tail用于存储上次的值。所以才有tail = p;
    下次创建新的p空间,并赋值。
    此时再执行tail = p;用于存储上次的值。

    评论

报告相同问题?

悬赏问题

  • ¥15 phython如何实现以下功能?查找同一用户名的消费金额合并—
  • ¥15 ARIMA模型时间序列预测用pathon解决
  • ¥15 孟德尔随机化怎样画共定位分析图
  • ¥18 模拟电路问题解答有偿速度
  • ¥15 CST仿真别人的模型结果仿真结果S参数完全不对
  • ¥15 误删注册表文件致win10无法开启
  • ¥15 请问在阿里云服务器中怎么利用数据库制作网站
  • ¥60 ESP32怎么烧录自启动程序,怎么查看客户esp32板子上程序及烧录地址
  • ¥50 html2canvas超出滚动条不显示
  • ¥15 java业务性能问题求解(sql,业务设计相关)