Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 以恒定的空间和线性时间向后打印单链表_Algorithm_Language Agnostic_Linked List - Fatal编程技术网

Algorithm 以恒定的空间和线性时间向后打印单链表

Algorithm 以恒定的空间和线性时间向后打印单链表,algorithm,language-agnostic,linked-list,Algorithm,Language Agnostic,Linked List,我听到一个采访问题: “向后打印单个链接列表, 在恒定的空间和线性时间中。” 我的解决方案是将linkedlist倒过来,然后像那样打印出来。有没有其他非破坏性的解决方案 可以使用递归调用链表链,并引用希望写入的内容。每个节点将使用子节点的打印功能,同时在打印自身之前传递引用 这样,列表中的每个节点都会向下传递,直到最后一个节点不能并直接进行写入,然后链中的每个节点都会在最后一个节点之后进行写入,一直返回到前面 编辑 这实际上不符合规格,因为堆栈上有线性空间。如果您有一些外部功能和写入字符串前面

我听到一个采访问题:

“向后打印单个链接列表, 在恒定的空间和线性时间中。”


我的解决方案是将linkedlist倒过来,然后像那样打印出来。有没有其他非破坏性的解决方案

可以使用递归调用链表链,并引用希望写入的内容。每个节点将使用子节点的打印功能,同时在打印自身之前传递引用

这样,列表中的每个节点都会向下传递,直到最后一个节点不能并直接进行写入,然后链中的每个节点都会在最后一个节点之后进行写入,一直返回到前面

编辑


这实际上不符合规格,因为堆栈上有线性空间。如果您有一些外部功能和写入字符串前面的方法,那么基本逻辑仍然可以工作。

只需迭代并在过程中打印,但将显示器倒置即可


7月7日,维维亚基基基基维维维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维亚维方法:将您的控制台更改为从右到左的阅读顺序,然后按正常顺序打印列表。它们将以倒序出现。必须以相反的顺序访问实际数据听起来并不是问题的限制。

您已经找到了大部分答案:将链接列表反转到位,然后遍历列表回到开始处打印它。为了防止它(永久)破坏性,当您将链表遍历回起始位置并打印它时,请再次将其反转到位


注意,只有当你只有一个执行线程,或者使整个遍历成为一个关键部分,所以一次只做一个线程(即,第二个线程永远不能在遍历中间的列表中播放)时,这才是有效的。

<好吧,这可能是一个面试问题,但这实际上是weis算法书背后的一个问题。这个问题清楚地表明,我们不能使用递归(采访者稍后会隐藏和揭示),因为递归不会使用常量空间,所以大部分递归将成为未来讨论的重点。解决方案是反向打印和反向返回。

但这将使用O(n)堆栈空间=/这是线性空间-堆栈计算为空间。啊,你是对的;忘了考虑函数的因素,哎哟:\编辑要显示的答案。我就是这么想的。然而,在现实世界中这是一个好的实践吗?(假设按引用传递)实际上,您会先将其反转而不打印,然后在再次反转时打印它。@Razor:ish。通常,如果您传递某个内容进行打印,您会希望被调用方将其视为不可修改。因此,在关心这类事情的语言中,要么函数需要(令人惊讶地)采用非常量参数,要么函数本身必须包含常量不安全代码。您必须决定这些好处是否值得冒编写错误代码的额外风险,或者您最好是制作列表的反向副本,或者使用双向结构(例如,双链接列表)。如果这是一个足够严重的好处,任何事情都是好的做法;-)这在现实生活中是个可怕的想法。你几乎肯定会使用一些随机访问的东西,比如数组,或者不关心O(n)内存开销。我选择了另一个,因为它发布得更早。但我投了赞成票,因为它有更多的细节。太糟糕了,所以如果答案非常相似,我不会接受多个答案:[