我知道我不应该尝试重新发明轮子,但是我需要完成这项任务。我很难从我的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();
}
}
答案 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
您错过了上述其中一项步骤。
此外,包含迭代列表(first
,toString()
等)的所有方法都需要在迭代开始之前使用size()
进行初始化。否则current = first;
可以是current
,迭代将不会开始。