尝试将ArrayList转换为LinkedList。不知道为什么这不起作用

时间:2013-01-20 04:53:25

标签: java arraylist linked-list

编辑:不知道为什么,但代码似乎现在没有任何编辑。可能是jGrasp调试器的问题?

===

确定。所以这是我的作业任务,将在2周后分配,但我想要一个良好的开端。请不要更正我的代码,或分享正确的代码。如果你可以在我正在做的事情上指出错误,那就太好了。

所以我有一个node以及以下构造函数:

public node(String name)
public node(String name, node next)

我需要在一个单独的类中编写方法public method(ArrayList<String> names),该方法会将names中的所有元素添加到链接列表中。

这就是我现在所拥有的:

public method(ArrayList<String> names) {
    if(names.size() == 0 || names == null) {
        throw new IllegalArgumentException();
    }

    // Handle base case, create first node
    first = new node(names.get(0));    // first has been declared above

    node current = first;

    // Add at the end of the list
    for(int i = 1; i < names.size(); i++) {
        current.next = new node(names.get(i));
        current = current.next;
    }

}

我不确定为什么这不能按要求工作。我正在使用jGrasp,并使用调试器,我看到最后,我得到一个只有1个值的链表(ArrayList中的最后一个元素)。为什么呢?

请不要建议使用任何高级功能,因为我是Java的新手,使用任何进一步的高级功能只会让我感到困惑。

2 个答案:

答案 0 :(得分:0)

我使用您的代码进行了测试(并使用JavaBean standard naming),您的方法运行正常。这是代码示例(这里有一些长代码块):

import java.util.ArrayList;

class Node {
    private String data;
    private Node next;

    public Node(String data) {
        this.data = data;
        this.next = null;
    }

    public Node(String data, Node next) {
        this.data = data;
        this.next = next;
    }

    public String getData() {
        return data;
    }

    public Node getNext() {
        return next;
    }

    public void setNext(Node next) {
        this.next = next;
    }
}

public class NodeTest {

    private Node first;

    public NodeTest() {
        this.first = null;
    }

    //hint: this is your code, no changes were made here except by the method name
    public void insertArrayList(ArrayList<String> names) {
        //changing the order of the comparison. Java evaluates from left to right
        if(names == null || names.size() == 0) {
            throw new IllegalArgumentException();
        }

        // Handle base case, create first node
        first = new Node(names.get(0));    // first has been declared above

        Node current = first;

        // Add at the end of the list
        for(int i = 1; i < names.size(); i++) {
            current.setNext(new Node(names.get(i)));
            current = current.getNext();
        }
    }

    public void traverse() {
        Node current = first;
        while (current != null) {
            System.out.println(current.getData());
            current = current.getNext();
        }
    }

    public static void main(String[] args) {
        ArrayList<String> names = new ArrayList<>();
        names.add("Hello");
        names.add("world!");
        NodeTest nodeTest = new NodeTest();
        nodeTest.insertArrayList(names);
        nodeTest.traverse();
    }
}

结果:

Hello
world!

因此,正如之前的评论中所述,如果您的链接列表已填满,或者您在非显示代码中的某个位置出现问题,则可能存在测试问题。

答案 1 :(得分:0)

我认为您正在返回该方法的最后一个节点,而您需要返回第一个节点,因为它包含所有其他链接节点。您应该返回第一个节点而不是当前节点。

如果您仍然遇到问题,请告诉我们您是如何测试的,以确定它只包含最后一个元素。