一个关于创建双向链表的问题。
感觉下面这张图里画横线的两个地方输出应该相同啊,为啥主函数里printf出来全是0.
#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;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!