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日

悬赏问题

  • ¥15 视频编码 十六进制问题
  • ¥15 Xsheii7我安装这个文件的时候跳出来另一个文件已锁定文件的无一部分进程无法访问。这个该怎么解决
  • ¥15 unity terrain打包后地形错位,跟建筑不在同一个位置,怎么办
  • ¥15 FileNotFoundError 解决方案
  • ¥15 uniapp实现如下图的图表功能
  • ¥15 u-subsection如何修改相邻两个节点样式
  • ¥30 vs2010开发 WFP(windows filtering platform)
  • ¥15 服务端控制goose报文控制块的发布问题
  • ¥15 学习指导与未来导向啊
  • ¥15 求多普勒频移瞬时表达式