总有一天你的谜底会解开 2021-03-14 20:24 采纳率: 77.4%
浏览 19
已采纳

关于双链表的定义,急

typedef struct shuanglianbiao
{
    struct shuanglianbiao* qian;
    int a;
    struct shuanglianbiao* next;
}ss;
ss* end, * head;
ss* creat(int n)
{
    ss * node;
    head = (ss*)malloc(sizeof(ss));
    end = head;
    end->qian = NULL;
    for (; n > 0; n--)
    {
        node = (ss*)malloc(sizeof(ss));
        scanf("%d", &node->a);
        end->next = node;
        node->qian = end;
        end = end->next ;
    }
    end->next = NULL;
    return head;
}

 

以上是我看网上的的创建双链表,应该是对的;我的问题主要是从for那里开始;

以下是我的码,求好心人帮我看看;

typedef struct shuanglianbiao
{
    struct shuanglianbiao* qian;
    int a;
    struct shuanglianbiao* next;
}ss;
ss* end, * head;
ss* creat(int n)
{
    ss * node;
    head = (ss*)malloc(sizeof(ss));
    end = head;
    end->qian = NULL;
    for (; n > 0; n--)
    {
        node = (ss*)malloc(sizeof(ss));
        scanf("%d", &node->a);
        end->next = node;
        node->qian = end->qian;
        end = node ;
    }
    end->next = NULL;
    return head;
}

 

在这部分源码下,当我使用 end->qian->n时,visual提醒我end->qian是个空指针,,求大神帮我从for开始看看我的创建错在哪

  • 写回答

3条回答 默认 最新

  • 小白小白你好菜 2021-03-15 00:10
    关注

    你的next指针没有问题,你的问题是你的qian指针。

    你的头结点的qian是NULL,next是第一个首元素节点,但是你的首元素节点的qian指向了头结点qian的NULL

    然后,你的end尾指针等于你的第一个节点,这也没错。

    当你申请第二个元素节点时,你的end->next还是没有问题,但是你的node的qian却指向了end->qian即头结点head。

    也就是说,你的所有next指针都没有问题,但是你的申请的元素节点的qian指针永远指向的是在你之前的第二个节点。

    当你使用end->qian的时候,如果此时你的节点到了头结点后的第一个首元素节点,那么你的end->qian的实际上指向了空,所以没有end->qian->a这个变量。你直接只创一个首元素节点实验一下,系统就会给你报错了。

    正确的for循环体应该是第一个程序那样写的,重在理解,理解不了就画图看看

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测