问题描述
问题:设计一种递归算法,以删除单链列表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 (将#修改为@)