[英]Linked list insertion using recursion
//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”语句中。.自从我开始使用双指针以来,我感到困惑。如何解决此问题?
首先将*node->next
替换为(*node)->next
因为->
比*
具有更高的优先级。
同样在addRecursion
用return *node
替换return node
,因为node
是双指针,并且您返回一个普通的指针。
调用addrecursion? 在其他地方。 似乎无限地呼唤自己;
首先,将newNode-> next设置为指向头(节点)。 并且您需要修改头以指向新节点。
您的代码没有执行此操作,因为它使用的是head中包含的地址的副本。
您的nextNode
是本地的,因此在其上的&
给出堆栈上本地变量的地址。 相反,您需要传递&node->next
,然后返回值就无关紧要了(如在add
中的第一个调用中,您将丢弃返回值)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.