链表问题
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->next
即 head->next
传递给计数函数。现在在递归之后,在上面的 if
条件下,它检查下一个节点地址,即 head->next->next
并继续直到节点是 null
,这样下一个地址就被传递了对于递归函数。希望这对您有所帮助。
在下面的代码片段中,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->next
即 head->next
传递给计数函数。现在在递归之后,在上面的 if
条件下,它检查下一个节点地址,即 head->next->next
并继续直到节点是 null
,这样下一个地址就被传递了对于递归函数。希望这对您有所帮助。