我正在尝试在 C 中递归实现插入函数,但我遇到了各种各样的问题。 我正在上 CS 入门课,在我们以前使用过 C 实验室之前,他们就开始向我们扔 C 实验室。 部分问题是列表指针未被识别为 NULL,而且我也非常确定我不正确地使用 malloc。
#include <stdio.h>
#include <stdlib.h>
#define True 1
#define False 0
typedef int BOOLEAN;
struct Node{
int value;
struct Node *next;
};
void insert(int x, struct Node **pL){
printf("insertn");
if(*pL == NULL){
printf("inside ifn");
struct Node *pN;
pN = (struct Node*) malloc(sizeof(struct Node));
(*pN).value = x;
(*pN).next = NULL;
return;
}
if (*pL != NULL){
printf("inside elsen");
insert(x, &(((*pL)->next)));
}
printf("end insertn");
};
void printList(struct Node *L){
while (L != NULL){
printf("%d", (*L).value);
printList((*L).next);
}
return;
};
main(){
printf("mainn");
struct Node* L;
//L).next = NULL;
int i;
printf("for loopn");
for (i = 3; i < 20; i+=2){
printf("%dn", i);
insert(i, &L);
}
printList(L);
};
首先,在main
中你需要初始化L
:
struct Node* L = NULL;
其次,insert
当你分配新节点pN
时,你没有将其分配给pL
,即它不会入。把它放在insert
return;
之前:
*pL = pN;
(您也可以删除return
并将if (*pL != NULL)
更改为else
。
然后,在printList
中,你们都在使用 while
循环和递归进行迭代。选择一个,而不是两个,例如:
while (L) {
printf("%dn", L->value);
L = L->next;
}
此外,在整个代码中,您可以将(*pointer_to_struct).field
替换为pointer_to_struct->field
以获得更好的样式。