//list.h file
typedef struct _lnode{
struct _lnode *next;
unsigned short row;
unsigned short column;
short data;
}lnode;
typedef struct _llist{
struct _lnode *head;
unsigned int size;
}llist;
//list.c file
void add(llist *list, lnode *newNode){
list->size++;
addRecursion(&list->head, newNode);
}
lnode* addRecursion(lnode **node, lnode *newNode){
if(*node == NULL){
*node = newNode;
}
else{
lnode *nextNode = *node->next;
*node->next = addRecursion(&nextNode, newNode);
}
return node;
}
//main function
llist list;
list.head = NULL;
lnode* new_node;
new_node = make_node(1,1,2);
add(&list, new_node);
printList(list.head);
我认为我在addRecursion函数中遇到问题,特别是在“else”语句中。 自从我开始使用双指针后,我感到很困惑...... 我该如何解决这个问题?
答案 0 :(得分:1)
首先将*node->next
替换为(*node)->next
,因为->
的优先级高于*
。
同样在addRecursion
将return node
替换为return *node
,因为node
是双指针,您将返回普通的指针。
答案 1 :(得分:0)
调用addrecursion?在其他地方。似乎无限地称呼自己;
首先将newNode->设置为指向head(节点)。 并且您需要修改头部以指向新节点。
你的代码没有做的,导致它使用head中包含的地址的副本。
答案 2 :(得分:0)
您的nextNode
是本地的,因此&
会在堆栈上提供局部变量的地址。相反,您需要传递&node->next
,然后返回值无关紧要(如add
中的第一次调用,您放弃返回值)。