关于单链表的创建问题,请大佬指点迷津!!!
这是我模仿小甲鱼在C语言课程里写的单链表代码,前几步还好好的,只要执行到打印部分,程序就没有反应了。我现在怀疑是不是数据没有录入链表当中,但我实在检查不出来是哪一步错了,请大佬指点迷津!!!
#include <stdio.h>
#include <stdlib.h>
typedef struct Node
{
int data;
struct Node *next;
}Node;
typedef struct Node *LinkList;
void CreateListHead(LinkList *L);
void ShowList(LinkList L);
void getInput(LinkList L);
void getInput(LinkList L)
{
printf("请输入一个整数:");
scanf("%d", &L->data);
}
void CreateListHead(LinkList *L)
{
LinkList p, q;
p = (LinkList)malloc(sizeof(Node));
if(p == NULL)
{
printf("内存分配失败!\n");
exit(EXIT_FAILURE);
}
getInput(p);
//不带头节点的头指针在头指针非空的情况下如何处理:
if(*L != NULL)
{
q = *L;
*L = p;
p->next = q;
}
else
{
*L = p;
p->next = NULL;
}
}
void ShowList(LinkList L)
{
LinkList p;
p = L;
while(p != NULL)
{
printf("%d\n", p->data);
p = p->next;
}
}
int main(void)
{
LinkList L = NULL;
int ch;
while(1)
{
printf("请问是否需要录入信息(Y/N):");
do
{
ch = getchar();
}while(ch != 'Y' && ch != 'N');
if(ch == 'Y')
{
//修改头指针,所以传递头指针的地址
//即使是传地址,函数那边的参数是一个指向library指针的指针,所以要用二级指针,只是同名。
CreateListHead(&L);
}
else
{
break;
}
}
printf("请问是否需要打印信息(Y/N):");
do
{
ch = getchar();
}while(ch != 'Y' || ch != 'N');
if(ch == 'Y')
{
ShowList(L);
}
return 0;
}
代码第90行:逻辑运算符应该是&&,而非 ||,因为之前用错了,所以在打印时一直在循环等待。进入了死循环 额 你这代码有点混乱呀 aalittlefish 发表于 2021-3-17 15:06
额 你这代码有点混乱呀
首先 CreateListHead(&L)有问题, L已经是指针了, &L传递的是指针的指针。
然后,你只是声明了L, 并没有为L申请内存,所以L就是个空指针, 当然就找不到啦 aalittlefish 发表于 2021-3-17 15:10
首先 CreateListHead(&L)有问题, L已经是指针了, &L传递的是指针的指针。
然后,你只是声明了L, 并 ...
你可以自己尝试一下 :
#include <stdio.h>
typedef struct node
{
int data;
struct node* next;
}node, *LinkList;
int main()
{
LinkList L;
printf("头结点的指针%p\n", L);
printf("头结点指针的指针%p\n", &L);
return 0;
} aalittlefish 发表于 2021-3-17 15:10
首先 CreateListHead(&L)有问题, L已经是指针了, &L传递的是指针的指针。
然后,你只是声明了L, 并 ...
并非如此,我这个链表是不带头结点的链表,所以不会为头指针申请空间。只需要将头指针指向第一个节点就可以了,所以我只需要为每一个节点申请空间即可
页:
[1]