链表问题

Linked List quetion

在下面的代码片段中,count函数统计创建的链表中的节点数。我想知道下一个地址是如何从 count(C_list->next); 函数调用传递过来的?

struct linked_list
{
 int number;
 struct linked_list *next;
};
typedef struct linked_list node;

main()
{
    head = (node*)malloc(sizeof(node));
    create(head);
    print(head);
    c = count(head);
}
int count(node* C_list)
{
    if(C_list->next==NULL)
      return(0);
    else
    {
      return(1+count(C_list->next));//How does the next address gets passed from this function call?
    }
}

首先,我必须建议您阅读一本关于 C 的书,因为您的问题似乎是 "the obvious"。所以这是我书中的一部分:

计算函数调用中的表达式 C_list->next,并将结果作为参数传递给函数。

表达式接受 C_list 变量(指针),取消引用它,然后接受 next 成员。 next 的值指向列表的下一个节点,然后作为参数传递给函数。

函数现在继续下一个节点。

main()
{
    head = (node*)malloc(sizeof(node));
    create(head);
    print(head);
    c = count(head);         //See here you are sending the actual node, which is head.
}
int count(node* C_list)
{
    if(C_list->next==NULL)   //-->Here the if condition is checking for the next node (head->next) whether it is null or not.
      return(0);            //-->If the next node is null, it means no nodes are there. So returning 0.
    else
    {
      return(1+count(C_list->next));
    }
}

现在棘手的部分是 return 行,您在其中将 C_list->nexthead->next 传递给计数函数。现在在递归之后,在上面的 if 条件下,它检查下一个节点地址,即 head->next->next 并继续直到节点是 null,这样下一个地址就被传递了对于递归函数。希望这对您有所帮助。