LinkedListInit, LinkedListCreateH 方法中的"L->next=NULL"有什么问题吗?

is there any wrong with the "L->next=NULL" in the LinkedListInit, LinkedListCreateH method?

本文关键字:NULL next 什么 问题 gt 方法 LinkedListCreateH LinkedListInit      更新时间:2023-10-16

我正在设置一个新的C++控制台应用程序,但它说我在程序中使用 NULL 指针时遇到了一些问题。在我的代码中找不到strong text链接列表 L 和 Node *p 的启动。在我的程序中找不到扫描的返回值。

这是一个新的C++窗口应用程序。

#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
typedef struct Node {
    ElemType data;
    struct Node* next;
}Node, * LinkedList;
LinkedList LinkedListInit() {
    Node* L;
    L = (Node*)malloc(sizeof(Node));
    if (L == NULL)printf("申请内存空间失败/n");
    L->next = NULL;
}
LinkedList LinkedListCreateH() {
    Node* L;
    L = (Node*)malloc(sizeof(Node));
    L->next = NULL;
    ElemType x;
    while (scanf("%d", &x) != EOF) {
        Node* p;
        p = (Node*)malloc(sizeof(Node));
        p->data = x;
        p->next = L->next;
        L->next = p;
    }
    return L;
}
LinkedList LinkedListCreatT() {
    Node* L;
    L = (Node*)malloc(sizeof(Node));
    L->next = NULL;
    Node* r;
    r = L;
    ElemType x;
    while (scanf("%d", &x) != EOF) {
        Node* p;
        p = (Node*)malloc(sizeof(Node));
        p->data = x;
        r->next = p;
        r = p;
    }
    r->next = NULL;
    return L;
}
LinkedList LinkedListInsert(LinkedList L, int i, ElemType e) {
    Node* pre;
    pre = L;
    int tempi = 0;
    for (tempi = 1; tempi < i; tempi++)
        pre = pre->next;
    Node* p;
    p->data = e;
    p->next = pre->next;
    pre->next = p;
}
LinkedList LinkedListDelete(LinkedList L, ElemType e) {
    Node* p, * pre;
    p = L->next;
    while (p->data != e) { pre = p; p = p->next; }
    pre->next = p->next;
    free(p);
    return L;
}
int main() {
    LinkedList list, start;
    LinkedListInit();
    printf("请输入单链表的数据:");
    for (start = list->next; start != NULL; start = start->next)printf("%d", start->data);
    printf("/n");
    int i;
    ElemType x;
    printf("请输入插入数据位置:");
    scanf("%d", &i);
    printf("请输入插入数据的值:");
    scanf("%d", &x);
    LinkedListInsert(list, i, x);
    for (start = list->next; start != NULL; start = start->next)printf("%d", start->data);
    printf("/n");
    printf("请输入要删除元素的值:");
    scanf("%d", &x);
    LinkedListDelete(list, x);
    for (start = list->next; start != NULL; start = start->next)printf("%d", start->data);
    printf("/n");
    return 0;
}

我希望输出 0,9....,但现在是 0

您有多个函数具有非 void 返回类型但没有 return 语句。

LinkedList LinkedListInit() {

LinkedListInsert

这是未定义的行为,在那之后,所有的赌注都关闭了。

int main() {
    LinkedList list, start;
    LinkedListInit();
    printf("请输入单链表的数据:");
    for (start = list->next; // <- blam

list 未初始化为任何内容,因此访问list->next应该会崩溃。这是假设你在 C 模式下编译(你可以,这个代码没有任何 ++(,如果你把它编译为 C++,你很可能会更早地被 xaxxon 所说的烧毁,因为编译器不会在 LinkedListInit 的末尾生成返回指令,你开始执行随机垃圾(至少这是 gcc 和 clang 倾向于做的事情(。

不返回你承诺的值在 C 中有点合法(不是在 C++ 中(,但仍然是一个坏主意。