使用递归链接列表插入

时间:2011-03-24 22:54:11

标签: c recursion linked-list

//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”语句中。 自从我开始使用双指针后,我感到很困惑...... 我该如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

首先将*node->next替换为(*node)->next,因为->的优先级高于*

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

答案 1 :(得分:0)

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

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

你的代码没有做的

,导致它使用head中包含的地址的副本。

答案 2 :(得分:0)

您的nextNode是本地的,因此&会在堆栈上提供局部变量的地址。相反,您需要传递&node->next,然后返回值无关紧要(如add中的第一次调用,您放弃返回值)。