m0_61684943 2022-09-24 17:25 采纳率: 73.8%
浏览 25
已结题

一个关于创建双向链表的问题

一个关于创建双向链表的问题。
感觉下面这张图里画横线的两个地方输出应该相同啊,为啥主函数里printf出来全是0.

img

#include <stdio.h>
#include <stdlib.h>


typedef struct DuLNode
{
    int data;
    struct DuLNode *prior;
    struct DuLNode *next;
}DuLNode,*DuLinkList;

void Create(DuLNode *p,DuLNode *move,int e)
{
    DuLNode s;
    DuLinkList ps=&s;
    ps=(DuLinkList)malloc(sizeof(DuLNode));
    ps->data=e;
    ps->prior=move;
    move->next=ps;
    ps->next=p;
    p->prior=ps;
    move=move->next;
    printf("%d\n",move->data);
}

int main()
{
    int a[100000],b,len=0;
    while(1)
    {
        scanf("%d",&b);
        if(b==-1) break;
        else a[len]=b,len++;
    }
    DuLNode s;
    DuLinkList p=&s,move=p;
    p=(DuLinkList)malloc(sizeof(DuLNode));
    p->data=-1,p->next=p,p->prior=p;
    for(int i=0;i<len;i++)
        Create(p,move,a[i]),printf("%d\n",move->data);
    return 0;
}


  • 写回答

2条回答 默认 最新

  • CSDN专家-link 2022-09-24 18:13
    关注

    37行没必要啊,p已经指向s了啊,干嘛又分配空间
    你这个move指向的是s的地址,但37行又改了p的地址,所以move和p已经不是一个东西了
    这么改就好了,move改为指针的指针,才能实现在函数里改变move自身的地址

    #include <stdio.h>
    #include <stdlib.h>
     
     
    typedef struct DuLNode
    {
        int data;
        struct DuLNode *prior;
        struct DuLNode *next;
    }DuLNode,*DuLinkList;
     
    void Create(DuLNode *p,DuLNode **move,int e)
    {
        DuLinkList ps=(DuLinkList)malloc(sizeof(DuLNode));
        ps->data=e;
        ps->prior=(*move);
        (*move)->next=ps;
        ps->next=p;
        p->prior=ps;
        (*move)=(*move)->next;
        printf("%d\n",(*move)->data);
    }
     
    int main()
    {
        int a[100000],b,len=0;
        while(1)
        {
            scanf("%d",&b);
            if(b==-1) break;
            else a[len]=b,len++;
        }
        DuLinkList p=(DuLinkList)malloc(sizeof(DuLNode));
        DuLinkList move = p;
        p->data=-1,p->next=p,p->prior=p;
        for(int i=0;i<len;i++)
            Create(p,&move,a[i]),printf("%d\n",move->data);
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 9月25日
  • 已采纳回答 9月25日
  • 创建了问题 9月24日

悬赏问题

  • ¥60 许可证msc licensing软件报错显示已有相同版本软件,但是下一步显示无法读取日志目录。
  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
  • ¥15 前置放大电路与功率放大电路相连放大倍数出现问题
  • ¥30 关于<main>标签页面跳转的问题
  • ¥80 部署运行web自动化项目
  • ¥15 腾讯云如何建立同一个项目中物模型之间的联系
  • ¥30 VMware 云桌面水印如何添加
  • ¥15 用ns3仿真出5G核心网网元