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

Raz*_*orm 9 language-agnostic algorithm linked-list

我听到一个采访问题:

"在恒定的空间和线性时间内向后打印单链表."

我的解决方案是将链接列表转换到适当位置,然后将其打印出来.还有另一种非破坏性的解决方案吗?

Jer*_*fin 11

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

但请注意,这只适用于您只有一个执行线程,或者使整个遍历成为一个关键部分,因此一次只有一个线程执行它(即,第二个线程永远不能使用中间的遍历).


x4u*_*x4u 8

只需沿途进行迭代和打印,但将显示器颠倒过来.

˙uoʇɐɯɹʇɐɯɹʇɐɯɹɟɟɐɹʇʇʇǝʇǝʇlllɐʍʍ


sth*_*sth 8

如果在打印后再次将其反转,则不再具有破坏性,因为原始订单已恢复.

  • 实际上你会在没有打印的情况下首先将其反转,然后在再次反转时将其打印出来. (2认同)
  • @Razor:是的.通常,如果你传递了一些东西用于打印,你会希望被调用者将其视为不可修改的.所以在关注那种事情的语言中,要么(令人惊讶地)需要一个非const参数,否则函数本身必须包含const-unsafe代码.您必须确定这些好处是否值得编写错误代码的额外风险,或者您是否更好地制作列表的反向副本,或使用双向结构(例如双向链接列表).如果这是一个足够严重的好处,任何事都是好的做法;-) (2认同)