【发布时间】:2011-10-06 19:18:43
【问题描述】:
我正在为堆栈创建一个链表实现。我已经完成了 pop 和 push 方法,但我似乎无法正确使用 peek 方法。我现在在那里的代码,返回我认为的内存地址。
这是我的代码:
public class LinkedStack<T> implements StackADT<T> {
private int count;
private LinearNode<T> contents;
public LinkedStack() {
count = 0;
contents = null;
}
@Override
public void push(T element) {
LinearNode<T> top = new LinearNode<T>(element);
if (contents == null) {
contents = top;
} else {
LinearNode<T> current = contents;
while (current.getNext() != null) {
current = current.getNext();
}
current.setNext(top);
}
count++;
}
@SuppressWarnings("unchecked")
@Override
public T pop() {
T item = (T) contents;
contents = contents.getNext();
count--;
return item;
}
@SuppressWarnings("unchecked")
@Override
public T peek() throws NoSuchOperationException {
T top = (T) contents;
if(top == null){
throw new NoSuchOperationException();
}
return top;
}
@Override
public boolean isEmpty() {
// TODO Auto-generated method stub
return false;
}
@Override
public int size() {
return count;
}
}
这是我调用 peek 方法时它输出的内容。我使用我的 push 方法添加了一个对象,并使用 size 方法对其进行了测试。它表明我添加了一个元素。然后我调用了我的 pop 方法并再次显示大小以确保它有效。
这是我 peek 方法的输出:
线性节点@33f42b49
这是我的 LinearNode 类:
public class LinearNode<T> {
private T element;
private LinearNode<T> next;
public LinearNode() {
this.element = null;
this.next = null;
}
public LinearNode(T element) {
this.element = element;
this.next = null;
}
public T getElement() {
return element;
}
public void setElement(T _element) {
this.element = _element;
}
public LinearNode<T> getNext() {
return next;
}
public void setNext(LinearNode<T> next) {
this.next = next;
}
}
【问题讨论】:
-
如果这是作业,请添加“作业”标签。
-
“我似乎无法获得 peek 方法”是什么意思?你得到一个编译错误?堆栈跟踪?输出不正确?请阅读此链接:stackoverflow.com/questions/how-to-ask
-
我认为您的代码是正确的。您是否正在对 peek 的结果进行系统输出?如果是这样,您可能会看到一个内存地址,因为它是 T 类型的对象。
-
这是我调用 peek 方法时的输出:LinearNode@33f42b49
-
它不是内存地址,它的 Object.toString() (即 .hashcode() 十六进制...)