链表创建成功后,可以正常的进行创建、和插入数据,但是在执行删除节点之后,链表的数据无法正常输出,在检测时发现,删除节点的函数形参返回后实参错乱,请问怎么解决
#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
typedef int ElenType;/*线性表中存储的数据类型*/
typedef struct Node
{/*线性表的单链表存储结构*/
ElenType data;
struct Node *next;
}Node;
typedef struct Node *LinkList;/*定义指针*/
void Initialize(LinkList *L)
{
*L = (LinkList)malloc(sizeof(Node));
(*L)->next = NULL;
}
void create(LinkList *L)
{
int i,j=1;
LinkList p, q;
p = *L;
printf("请输入需要初始化的数据个数:");
scanf_s("%d", &i);
while (j <= i)
{
q = (LinkList)malloc(sizeof(Node));
printf("请输入第%d个数据:",j);
scanf_s("%d", &q->data);
p->next = q;
p = p->next;
j++;
}
p->next = NULL;
}
int Insertion(LinkList *L, int i,ElenType e)
{/*插入数据*/
int j=1;
LinkList q, p;
p = *L;
while (p&&j < i)
{/*寻找需要插入的位置*/
p = p->next;
++j;
}
if (!p || j > i)
return ERROR;
q = (LinkList)malloc(sizeof(Node));
q->data = e;
q->next = p->next;
p->next = q;
return OK;
}
void InsertionMenu(LinkList *L)
{
int i, j;
printf("请输入需要插入的位置");
scanf_s("%d", &j);
printf("请输入需要插入的数据:");
scanf_s("%d", &i);
Insertion(L, j, i);
}
void Display(LinkList L)
{/*输出链表中的数据*/
LinkList p = L->next;
if (!p)
printf("链表为空!\n");
else
{
while (p)
{
printf("%d ", p->data);
p = p->next;
}
putchar('\n');
}
}
int Delete(LinkList *L,int i)
{/*删除某个位置上的数据*/
LinkList q, p;
int j=1;
p = *L;
while (j <= i && p)
{
p = p->next;
j++;
}
if (j > i+1 || !p)
return ERROR;
q = p;
p= q->next;
free(q);
return OK;
}
void menu()
{
printf("程序的功能菜单:\n0:菜单\n1:创建链表\n2:插入数据\n3:删除某个位置上的数据\n");
}
int main(void)
{
int i = 0,j;
LinkList L;
while (i != 7)
{
switch (i)
{
case 0:
menu();
break;
case 1:
Initialize(&L);
create(&L);
printf("链表中的数据为:");
Display(L);
break;
case 2:
InsertionMenu(&L);
printf("插入数据后的链表中的数据为:");
Display(L);
break;
case 3:
printf("请输入需要删除的数据的位置:");
scanf_s("%d", &j);
Delete(&L, j);
printf("删除数据后的链表中的数据为:");
Display(L);
break;
default:
printf("不存在该功能选项!\n");
break;
}
printf("请输入需要执行的选项:");
scanf_s("%d", &i);
}
printf("感谢您的使用!\n");
return 0;
}