我正在尝试将bst转换为链接列表,但在尝试调用要在显示器上打印的列表时出现错误。
这是我的主要功能代码,
ListNodePtr createListnode(int key) {
ListNodePtr newList = (ListNodePtr)malloc(sizeof(struct ListNode));
if (newList != NULL) {
newList->key = key;
newList->next = NULL;
return newList;
} else {
return NULL;
}
}
ListNodePtr insertNodeIntoList(ListNodePtr root, const ListNodePtr z) {
if (root == NULL) {
root = createListnode(z->key);
} else {
root->next = insertNodeIntoList(root->next, z);
}
return root;
}
void linkedListINIT(ListNodePtr list, TreeNodePtr root) {
if (root != NULL) {
linkedListINIT(list, root->left);
ListNodePtr current = createListnode(root->key);
list = insertNodeIntoList(list, current);
linkedListINIT(list, root->right);
}
return;
}
ListNodePtr convertBSTtoLinkedList(TreeNodePtr root) {
ListNodePtr list = NULL;
linkedListINIT(list, root);
return list;
}
这是listNodePtr和print函数的初始化。
struct ListNode {
int key;
struct ListNode *next;
};
typedef struct ListNode *ListNodePtr;
和
void printList(ListNodePtr head) {
if (head != NULL) {
printf("%d ", head->key);
printList(head->next);
}
return;
}
问题是,当我尝试打印最终列表时,即使“当前'如果我用print语句检查它,变量输出正确。我不确定它出错的地方,main函数只调用convertBSTtoLinkedList和printList。任何帮助将不胜感激!
答案 0 :(得分:0)
在函数调用linkedListINIT (list, root)
中,函数linkedListINIT()
不可能修改变量list
。它的定义并不重要;它只是不可能修改作为参数传递的变量,因为C语言是严格按值传递的。
因此,如果不读取convertBSTtoLinkedList()
的定义,我知道它总是返回NULL。
答案 1 :(得分:0)
修改函数insertNodeIntoList()
和linkedListINIT()
,如下所示
ListNodePtr insertNodeIntoList(ListNodePtr root, int z) {
if (root == NULL) {
root = createListnode(z);
} else {
root->next = insertNodeIntoList(root->next, z);
}
return root;
}
void linkedListINIT(ListNodePtr list, TreeNodePtr root) {
if (root != NULL) {
linkedListINIT(list, root->left);
list = insertNodeIntoList(list, root->key);
linkedListINIT(list, root->right);
}
return;
}
希望它对你有用!