如果您向其提供列表 1->2:
- head=1->2,head 不为空,以 2 重复(继续 5)
- => head=2,head 不为 null,以 null 重复(继续 4)
- => => head=null,head为null,返回
- => 打印头-> 数据 "2" 并返回
- 打印头数据“1”并返回
如果您要在打印语句再次出现之前移动它:
void fun1(struct node* head)
{
if(head == NULL)
return;
printf("%d ", head->data);
fun1(head->next);
}
它会是这样的:
- head=1->2,head 不为空,打印 head->data “1”,以 2 重复(继续 5)
- => head=2,head 不为 null,打印 head->data "2",以 null 重复(继续 4)
- => => head=null,head为null,返回
- => 返回
- 返回
在这两种情况下,都会打印所有非空节点。要仅打印其中一个,您的代码必须将其与另一个区分开来,如下所示:
void print_last(struct node* n)
{
if( n == NULL )
{
printf("empty list!");
}
else if( n->next == NULL )
{
printf("%d", n->data);
}
else
{
print_last(n->next);
}
}
用你得到的相同列表 1->2 调用;
- n=1->2, n != null 和 n->next != null,以 2 重复(继续 3)
- => n=2,n != null 和 n == null。打印 n->data "2" 并返回
- 返回
请注意,当找到最后一个元素时它不会递归,因此 n 为 null 的唯一方法是如果您尝试打印空链表 (NULL)。