第一种算法:
void print(ListNode* list)
{
if(list!=NULL)
{
if(list->next!=NULL)
{
std::cout<<list->value;
print(list->next);
}
}
}
第二种算法:
void print(ListNode* list)
{
if(list!=NULL)
{
std::cout<<list->value;
print(list->next);
}
}
这两个算法都正确,但是看到一些资料里面都是使用第一种算法,而不是使用第二种。
原因:使用第一种算法在处理到最后一个结点后就会停止,当最后一个结点时,它的next为NULL,就不会继续递归下去。但是第二种算法则会继续递归下去,当判断到最后一个结点时候会继续递归到 list->next,此时因为下一个结点为NULL,然后停止递归,返回到上一层。这样就是说第一种算法比第二种算法少迭代一次,所以大部分资料上面都采用的是第一种算法。