链表清单

时间:2016-02-09 12:07:29

标签: c singly-linked-list

在下面的代码片段中,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?
    }
}

2 个答案:

答案 0 :(得分:0)

首先,我必须建议你读一本关于C的书,因为看起来你的问题是“显而易见的”。所以这是我书中的一部分:

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

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

此功能现在继续下一个节点。

答案 1 :(得分:0)

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));
    }
}

现在棘手的部分是返回行,您将C_list->nexthead->next传递给count函数。现在在递归之后,在上面的if条件下,它会检查下一个节点地址,即head->next->next,它会一直持续到节点为null,这样下一个地址就会通过用于递归函数。希望这可能对你有所帮助。