初始化之后为什么L.next不是NULL呢,主函数里YES打印不出?哪位帮忙看看,谢谢!
#include <stdio.h>
#include <stdlib.h>
#define ElemTyoe int
typedef struct DuLNode {
ElemTyoe data;
struct DuLNode* prior;
struct DuLNode* next;
}DNode;
void InitList(DNode* L); //初始化
int main()
{
DNode L;
InitList(&L);
if (L.next == NULL) printf("YES");
return 0;
}
void InitList(DNode* L)
{
L = (DNode*)malloc(sizeof(DNode));
L->next = NULL;
L->prior = NULL;
printf("初始化双向链表成功\n");
}
void InitList(DNode* L);
这个不能作用到主程序
应该写
void InitList(DNode** L1)
{
*L1 = (DNode*)malloc(sizeof(DNode));
DNode** L = *L1;
L->next = NULL;
L->prior = NULL;
printf("初始化双向链表成功\n");
}
int main()
{
DNode *L;
InitList(&L);
if (L->next == NULL) printf("YES");
return 0;
}
其实主要原因是因为你在函数内部又申请了一段空间,而里面申请是里面的改变的也是里面结构体的成员,而外面的结构体并没有改变,其实在里面就不用申请空间了直接进行next,prior改变即可
【以下回答由 GPT 生成】
问题:
我在C语言中使用双向链表,但是在初始化之后,为什么L.next不是NULL呢?在主函数中,我尝试打印YES,但是没有输出。请问有谁可以帮我看看问题在哪里呢?谢谢!
#include <stdio.h>
#include <stdlib.h>
#define ElemType int
typedef struct DuLNode {
ElemType data;
struct DuLNode* prior;
struct DuLNode* next;
}DNode;
void InitList(DNode** L); // 初始化
int main()
{
DNode* L;
InitList(&L);
if (L->next == NULL) printf("YES");
return 0;
}
void InitList(DNode** L)
{
*L = (DNode*)malloc(sizeof(DNode));
(*L)->next = NULL;
(*L)->prior = NULL;
printf("初始化双向链表成功\n");
}
优化后的问题:
我在C语言中使用双向链表,但是在初始化之后,为什么L.next不是NULL呢?在主函数中,我尝试打印YES,但是没有输出。我希望找到问题所在并进行优化。
#include <stdio.h>
#include <stdlib.h>
#define ElemType int
typedef struct DuLNode {
ElemType data;
struct DuLNode* prior;
struct DuLNode* next;
}DNode;
void InitList(DNode** L); // 初始化双向链表
int main()
{
DNode* L;
InitList(&L);
if (L->next == NULL) printf("YES");
return 0;
}
void InitList(DNode** L)
{
*L = (DNode*)malloc(sizeof(DNode));
(*L)->next = NULL;
(*L)->prior = NULL;
printf("成功初始化双向链表\n");
}