单链表的打印函数无法跳出
这是我自己写的一个单链表,但是打印函数出了问题,是一个死循环出不来,检查了很久也没看出来。有哪位大佬能帮我找找茬。代码如下:
#include <stdio.h>
#include <stdlib.h>
typedef struct num{
int a;
struct num* next;
}Num;
typedef struct node{
int sum;
struct num* fir;
struct num* end;
}Node;
Node* init_struct(void)
{
Node *p=NULL;
p=(Node *)malloc(sizeof(Node));
p->sum=0;
p->fir=NULL;
p->end=NULL;
return p;
}
Node* add_Node(int su,Node *k)
{
Node *p=k;
Num *n=NULL;
n=(Num *)malloc(sizeof(Num));
n->a=su;
(p->sum)++;
if(p->fir==NULL) //插链表的第一个元素
{
printf("插入链表成功\n");
p->fir=n;
p->end=n;
p->fir->next=p->end;
p->end->next=NULL;
return p;
}
if(p->sum==2)
{
if((n->a)>=(p->fir->a)) //插头
{
p->fir->next=n; //P的下一个
p->end=n;
p->end=NULL;
}
else //插尾
{
p->fir=n;
p->fir->next=p->end;
}
printf("插入链表成功????????\n");
return p;
}
Num *pre=p->fir;
Num *pro=pre;
while(((n->a)>=(pre->a))&&(pre!=NULL)) //寻找插入位置
{
pro=pre;
pre=pre->next;
}
if(pre==(p->fir)) //插头
{
n->next=p->fir;
p->fir=n;
}
else if(pre==NULL) //插尾
{
p->end->next=n;
p->end=n;
n->next=NULL;
}
else //插中间
{
pro->next=n;
n->next=pre;
}
printf("插入链表成功!!!!!\n");
return p;
}
int print_list(Node *p)
{
Num *pre=p->fir;
if(pre==NULL)
{
printf("链表什么都没有\n");
return 1;
}
while(1)
{
if(pre==NULL)
break;
printf("出不来");
printf("%d\n",pre->a);
pre=pre->next;
}
printf("\n");
printf("该链表有%d个元素\n",p->sum);
return 0;
}
int main()
{
Node* p;
int n;
p=init_struct();
while(1)
{
scanf("%d",&n);
if(n==-1)
break;
p=add_Node(n,p);
//getchar();
}
print_list(p);
free(p);
p=NULL;
return 0;
}