单循环链表头插法遍历完直接退出来是怎么回事呀?
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#define BOOL int
#define FALSE 0
#define TRUE 1
typedef struct link{
int data;
struct link* next;
}LinkList;
BOOL InitList(LinkList* L); //初始化
void List_HeadInsert(LinkList* L);//头插法
void List_TailInsert(LinkList* L);//尾插法,正序输入
void display(struct link* p);
int main()
{
LinkList L; LinkList P;
List_TailInsert(&L);
List_HeadInsert(&P);
printf("BYE");
return 0;
}
BOOL InitList(LinkList* L)
{
L = (LinkList*)malloc(sizeof(LinkList));
if (L == NULL)
{
printf("内存不足");
return FALSE;
}
L->next = L;
return TRUE;
}
void List_HeadInsert(LinkList* L)
{
InitList(L);
int x;
LinkList* temp = L;
printf("请输入数据:");
scanf("%d", &x);
while (x != 0)
{
LinkList* a = (LinkList*)malloc(sizeof(LinkList));
a->data = x;
a->next = temp->next;
temp->next = a;
printf("请再次输入(输入0结束插入):");
scanf("%d", &x);
}
display(L);
}
void List_TailInsert(LinkList* L)
{
InitList(L);
int x;
LinkList* temp = L;
printf("请输入数据:");
scanf("%d", &x);
while (x != 0)
{
LinkList* a = (LinkList*)malloc(sizeof(LinkList));
a->data = x;
temp->next = a;
temp = a;
printf("请再次输入(输入0结束插入):");
scanf("%d", &x);
}
temp->next = L;
display(L);
}
void display(struct link* p)
{
struct link* t = p->next; //凭借电视头指针,p->next指向第一个元素的地址
while (t != p) //链表的最后一个结点是NULL,遇到NULL就会结束
{
printf("%d ", t->data); //遍历数据区
t = t->next; //指向下一个结构的地址
}
printf("\n");
}```