繁体   English   中英

使用递归插入链表

[英]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因为->*具有更高的优先级。

同样在addRecursionreturn *node替换return node ,因为node是双指针,并且您返回一个普通的指针。

调用addrecursion? 在其他地方。 似乎无限地呼唤自己;

首先,将newNode-> next设置为指向头(节点)。 并且您需要修改头以指向新节点。

您的代码没有执行此操作,因为它使用的是head中包含的地址的副本。

您的nextNode是本地的,因此在其上的&给出堆栈上本地变量的地址。 相反,您需要传递&node->next ,然后返回值就无关紧要了(如在add中的第一个调用中,您将丢弃返回值)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM