运行时错误:链接列表无法正确输出

问题描述

问题:设计一种递归算法,以删除单链列表L中所有值为x的节点,而无需前导节点

问题:程序无法正确输出链接列表。问题是我首先创建了一个带有头节点的单链接列表,然后返回一个没有头节点要删除的单链接列表,但是删除后的函数DeleteX()在执行后无法正确输出>

#include <stdio.h>
#include <stdlib.h>      // Use malloc()
#define ElemType int

typedef struct LNode {
    ElemType data;
    struct LNode* next;
} LNode;

LNode* Init_List();
LNode *Create_From_Tail(LNode* L3);
void DeleteX(LNode* L4,ElemType x2);
void Print_List(LNode* L5);

int main(int argc,char* argv[])
{
    LNode* L;
    ElemType x;
    L = Init_List();
    printf("Input a linklist end with -1: ");
    L = Create_From_Tail(L);
    printf("Input a being deleted data: ");
    scanf_s("%d",&x);
    DeleteX(L,x);
    printf("Output a linklist: ");
    Print_List(L);
    return 0;
}

LNode* Init_List()
{
    LNode* L2 = (LNode*)malloc(sizeof(LNode) * 1);
    L2->next = NULL;
    return L2;
}
LNode *Create_From_Tail(LNode* L3)
{
    int i = 1;
    int j;
    LNode* r = L3;
    while (i != 0) {
        scanf_s("%d",&j);
        if (j != -1) {
            LNode* p = (LNode*)malloc(sizeof(LNode) * 1);
            p->data = j;
            r->next = p;
            r = p;
        }
        else {
            r->next = NULL;
            i = 0;
        }
    }
    return L3->next;
}
void DeleteX(LNode* L4,ElemType x2)
{
    LNode* s;
    if (L4 == NULL) {
        return;
    }
    if (L4->data == x2) {
        s = L4;
        L4 = L4->next;
        free(s);
        DeleteX(L4,x2);
    }
    else {
        L4 = L4->next;
        DeleteX(L4,x2);
    }
}
void Print_List(LNode* L5)
{
    while (L5 != NULL) {
        printf("%d ",L5->data);
        L5 = L5->next;
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...