【发布时间】:2011-03-22 21:01:46
【问题描述】:
首先,如果这是一种令人困惑或倒退的方式来实现我想要完成的目标,我深表歉意,但我是“Ocaml 风格”的新手。
我想取出列表的最后一个元素,并将其移到列表的前面,将所有元素上移一个。
例如:有[1;2;3;4;5] -> [5;1;2;3;4]
我知道 Ocaml 中的列表基本上是链表,所以我打算递归遍历列表,找到最后一个元素,然后让该元素的尾部/剩余列表指向列表的头部。
我主要困惑的是如何断开从倒数第二个元素到最后一个元素的链接。在上面的例子中,我想让 5 指向 1,但 4 不再指向 5。
我该如何做到这一点,有没有更简单的方法来查看我完全错过的这个?
【问题讨论】:
-
作为补充 Joshua Smith/nlucaroni 下面回答的注释,如果您经常想将最后一个元素移到顶部,则列表是错误的表示,因为所有节点都需要重新分配。您可以使用带有可更新尾部的列表——如果您非常确信共享不会引起问题
-
帕斯卡正确;还有带尾部的拉链。
标签: list recursion linked-list ocaml