我是数据结构的初学者。让我们假设我有一个包含5个元素的链表。我正在编写以下代码来使用递归反转链表:
void reverse (node* p)
{
if (p->next == NULL)
{
head = p;
return;
}
reverse (p->next);
node* q = p->next;
q->next = p;
p->next = NULL;
}
在上面的代码中,头节点最初作为参数传递。这段代码运行良好;但问题是我们为什么要使用该行?
p->next = NULL;
如果我没有添加该行,它将变为无限循环。但即使没有添加该行,也会在下一个堆栈展开中为p-> next分配前一个节点的地址。那么,如果没有添加该行,为什么会导致无限循环?