我正在尝试重新研究数据结构的几个主题,包括链接列表。因为我的上一堂课工作已经太久了,不幸的是,我不确定我的代码出了什么问题。请给我一些建议如何解决这个问题,如下所示。
LinkedList.java
package my.linked.list;
public class LinkedList<E> {
private Listnode<E> items;
private Listnode<E> lastNode;
int numItems;
public LinkedList() {
items = new Listnode<E>(null);
lastNode = new Listnode<E>(null);
numItems = 0;
}
public void add(E d) {
//Listnode<E> temp = new Listnode<E>(d);
//lastNode.setNext(temp);
lastNode.setNext(new Listnode<E>(d));
lastNode = lastNode.getNext();
numItems++;
}
//public void add(int pos){
//
//}
public void remove(Listnode<E> n) {
Listnode<E> temp = items;
if (items == n) {
items = n.getNext();
}
while (temp.getNext() != n) {
temp = temp.getNext();
}
temp.setNext((n.getNext()));
numItems--;
}
//public void remove(int pos) {
//
//}
public boolean isEmpty() {
boolean ans = false;
if (numItems == 0) {
ans = true;
}
return ans;
}
public boolean contains() {
return false;
}
public int size() {
return numItems;
}
}
MyLinkedListTest.java
package my.linked.list;
import java.io.*;
public class MyLinkedListTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
LinkedList myTest = new LinkedList();
// check whether the linkedlist is empty or not
boolean ans = false;
ans = myTest.isEmpty();
if (ans = true) {
System.out.println("This Linked List is empty");
} else {
System.out.println("This Linked List is not empty");
}
// add operation
for (int i=0; i<5; i++){
myTest.add(i);
System.out.println(myTest);
}
System.out.println("Current size of myList : " + myTest.size());
}
}
当我运行此代码时,我会收到以下消息。
此链接列表为空
my.linked.list.LinkedList@667262b6
my.linked.list.LinkedList@667262b6
my.linked.list.LinkedList@667262b6
my.linked.list.LinkedList@667262b6
my.linked.list.LinkedList@667262b6
Current size of myList : 5
看起来我的代码不会将整数值添加到linkedlist数据类型中。请让我知道如何解决此问题。非常感谢提前。
答案 0 :(得分:0)
问题是my.linked.list.LinkedList@667262b6
看起来不像整数列表吗?那是因为你没有在你的类中添加toString()
方法,迭代列表以打印其元素。
答案 1 :(得分:0)
它实际上已将整数添加到您的LinkedList中。您可以使用debug来查看。
System.out.println(Object o)将自动调用您传入的对象的toString()方法,该方法未实现。因此它将打印出指向LInkedList的指针。
my.linked.list.LinkedList@667262b6
是指向LinkedList的指针。
答案 2 :(得分:0)
您只需覆盖toString()
类中的LinkedList
方法,即可显示有意义的信息 - 例如列表的内容。在当前状态下,LinkedList
的实例正在调用Object
的默认toString()
方法,该方法打印内存地址 - 不是很有用。在LinkedList
类中写下这样的内容:
@Override
public String toString() {
Listnode<E> temp = items;
StringBuilder sb = new StringBuilder();
while (temp != null) {
sb.append(temp.getValue()).append(", "); // I'm guessing
temp = temp.getNext();
}
return sb.toString();
}