鉴于单个链接列表向后读取列表。这听起来像一个简单的问题,但是(!)你不能改变链表的指针,你只能使用3个变量(指针或其他变量),每个单元格都有一个以false开头的bool标志,你可以使用它如你所愿。
在O(n ^ 2)中很容易做到,但我认为有更好的解决方案(也许是O(n)?)。
答案 0 :(得分:2)
这种递归方法只能在列表上进行一次迭代。所以它是O(n)。
它是如何运作的:
它在列表中递归,直到它结束并在stackframe上添加方法调用。最后它打印出最后一个节点并返回到第二个最后一个方法调用(它通过堆栈框架反向驱动)
void RecursiveBackwardPrint(node* node)
{
if(node->next != nullptr)
{
RecursiveBackwardPrint(node->next);
}
std::cout<<node->value<<std::endl;
}
答案 1 :(得分:1)
你可以在O(n)中通过每次组合32个布尔值来实现它,以便将它们转换为指向前一个32个元素块的指针。
算法:
它是O(n)但至少需要32 * n次操作,它只适用于很长的列表。