第一种算法:
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,然后停止递归,返回到上一层。这样就是说第一种算法比第二种算法少迭代一次,所以大部分资料上面都采用的是第一种算法。
本文对比了两种递归打印链表节点值的方法,分析了两种算法的区别及优劣,指出第一种算法在处理到最后一个节点时停止递归,而第二种算法则会额外进行一次无效递归。
6378

被折叠的 条评论
为什么被折叠?



