今天写一个升序链表(输入0表示结束)的时候发现这么写,输出第一个数永远为0;
比如输入 1 3 2 0,输出就是0123
想问问大佬为什么,小白一枚
代码如下
#include"doublelist.h"
void add_node(dou_node *first,dou_node *last,dou_node *p)
{
dou_node *pk=first;
dou_node *pr=NULL;
if(NULL==first)
{
first=p;
last=p;
printf("---\n");
return ;
}
while(pk)
{
if(pk->data>p->data)
break;
pr=pk;
pk=pk->next;
}
if(pk)
{
if(pk==first)
{
first=p;
p->next=pk;
pk->prev=p;
}
else
{
pr->next=p;
p->prev=pr;
p->next=pk;
pk->prev=p;
}
}
else
{
pr->next=p;
p->prev=pr;
last=p;
}
}
dou_node* creat_dou_list()
{
int d;
dou_node* first=(dou_node *)malloc(sizeof(*first)); //问题所在???
dou_node* last=(dou_node *)malloc(sizeof(*last));
dou_node* p=NULL;
while(1)
{
scanf("%d",&d);
if(d==0)
{
break;
}
dou_node* p=(dou_node *)malloc(sizeof(*p));
p->data=d;
p->next=NULL;
p->prev=NULL;
add_node(first,last,p);
}
return first;
}
void print_list(dou_node *p)
{
if(NULL==p)
return ;
//p=p->next;
while(p)
{
printf("%d",p->data);
p=p->next;
}
printf("\n");
}