节点未正确添加到LinkedList

时间:2018-03-13 22:38:13

标签: java

我知道我不应该尝试重新发明轮子,但是我需要完成这项任务。我很难从我的LinkedList获取任何输出,我相信我的addFirst()方法没有正确添加节点,或者我的toString()方法没有正确显示LinkedList。知道为什么吗?我已经对此感到难过,并且不确定在哪里寻求帮助。

我没有收到任何错误,只有零输出。

主:

public static void main(String args[]) {

    LinkList theList = new LinkList();

    theList.addFirst("One");
    theList.getFirst();
    theList.size();

    theList.toString();

}   // end main()

LinkList.java:

public class LinkList {

private Node first;
private Node current;

public LinkList() {
    first = null;
    current = first;
}

public boolean isEmpty() {
    return (first == null);
}

public void removeFirst() {
    try {
        if (!isEmpty()) {
            Node temp = first;
            first = first.getNext();
        }
    } catch (NullPointerException e) {
    }
}

public int size() {
    int count = 0;

    if (isEmpty()) {
        return 0;
    }

    while (current != null) {
        current = current.getNext();
        count++;
    }
    return count;
}

@Override
public String toString() {
    String str;
    int size = size();
    str = "Size: " + size;
    str += "\nElements:";
    while (current != null) {
        for (int i = 0; i < size; i++) {
            str += "\nNode: " + current.getNext();
        }
    }
    return str;
}

public String getFirst() {
    if (first == null) {
        return null;
    }
    return first.getData();
}

public void addFirst(String data) {
    Node newNode = new Node(data);
    newNode.getNext();
    first = newNode;
}

public boolean contains(String target) {
    while (current != null) {
        if (current.getData().equals(target)) {
            return true;
        }
        current.getNext();
    }
    return false;
}

Node.java

public class Node {

private String data;
private Node next;

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

public String getData() {
    return data;
}

public Node getNext() {
    return next;
}

public void setData(String data) {
    this.data = data;
}

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

public String toString() {
    return "Node: " + getData();
}

}

2 个答案:

答案 0 :(得分:1)

您应该使用System.out.println();围绕要查看控制台输出的呼叫,例如:

System.out.println(theList.size());
System.out.println(theList.toString());

请注意,您无需在第二行显式调用toString()方法,System.out.println(theList);自动调用theList的{​​{1}}方法,它等同于{{ 1}}。

答案 1 :(得分:1)

from ...方法中,您应该:

  • 创建新节点
  • 将当前addFirst()节点设置为新节点的下一个节点
  • 将新节点设置为first

您错过了上述其中一项步骤。

此外,包含迭代列表(firsttoString()等)的所有方法都需要在迭代开始之前使用size()进行初始化。否则current = first;可以是current,迭代将不会开始。