【问题标题】:Reversing the elements in a list ADT反转列表 ADT 中的元素
【发布时间】:2013-09-26 15:23:16
【问题描述】:

自从我访问 SO 以来已经有一段时间了。无论如何,让我切入正题。我有一个家庭作业,要求使用链表和列表抽象数据类型执行各种任务。我已经完成了一切,除了最后一个问题要求我反转列表 ADT 中的元素。我已经为链接列表做了这个,但是我被困在列表 ADT 部分。我的 TA 提到使用列表 ADT 比使用链表更容易,但我不知道从哪里开始。也许我想多了。任何人都可以为我指出正确的方向吗?这是我用于反转链表的伪代码:

c = pointer to current node
p = pointer to previous node
n = pointer to next node
H = head pointer

c <- H
if (c.next  != null)
    n <- c.next
while (n.next != null) {
    p <- c
    c <- n
    n <- c.next
    c.next -> p
}
if (H.next != null)
    H.next -> n
if (n != null AND c != null)
    n.next -> c

我们将不胜感激。

【问题讨论】:

    标签: list types reverse abstract pseudocode


    【解决方案1】:

    如果使用 List ADT 表示 java 中的抽象 List 对象,那么您可能只想研究使用 Collections.reverse()

    List<String> myList = new LinkedList<String>();
    Collections.reverse(myList);
    

    如果您对“ADT”有其他要求,请务必告诉我

    【讨论】:

    • 感谢您的快速回复。然而,我的教授所要求的并不是 Java 特有的。当他说列表 ADT 时,我认为他的意思是用一种可以使用基本数据结构(例如数组或链表或类似的东西)实现的方式编写伪代码。
    • 在这种情况下,我会说考虑迭代列表的值,并可能将它们反向放入一个新列表中。如果不允许使用新对象,则交换值也可以,假设您可以使用索引。
    • 我实际上去办公时间寻求帮助,并被明确告知不要使用索引:(在这种情况下,创建一个新对象是唯一的方法吗?
    • 不使用索引 (foreach) 将是最容易使用的方法,尽管我个人之前没有在此类细节中使用过这个概念,所以我不确定。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多