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

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

img

#include 
#include 


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;iCreate(p,move,a[i]),printf("%d\n",move->data);
    return 0;
}


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;
}

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632