我设置了以下代码:
public class ListStack implements Stack {
private class List {
List next;
Object object;
public List(Object o, List n) {
object = o;
next = n;
}
}
private List firstItem;
private int size;
public ListStack() {
firstItem = new List(null, null);
size = 0;
}
public List getEnd() {
List endEl = firstItem;
while (endEl.next != null) {
endEl = endEl.next;
}
return endEl;
}
public boolean push(Object o) {
List e1 = new List(o, null);
this.getEnd().next = e1;
size++;
return true;
}
public Object pop() {
if (this.firstItem.next == null) {
return null;
} else {
List endEl;
List tempEl;
endEl = this.getEnd();
tempEl = firstItem;
while (tempEl.next != endEl) {
tempEl = tempEl.next;
}
tempEl.next = null;
size--;
return tempEl.object;
}
}
public int size() {
return size;
}
public static void main(String[] args) {
Stack s = new ListStack();
Object test = new Object();
Object test2 = new Object();
System.out.println("pushing Object test to List: " + s.push(test));
System.out.println("pushing Object test2 to List: " + s.push(test2));
System.out.println("popping Object from List: " + s.pop());
System.out.println("popping Object from List: " + s.pop());
System.out.println("popping Object from List: " + s.pop());
}
}
这一个:
public interface Stack {
public int size();
public boolean push(Object o);
public Object pop();
}
但是它只给了我第一个对象和两次“null”但它应该给我两个对象:(我的错误在哪里?它是要求最后一个项目并将其返回(.object)但只返回第一个对象地址
答案 0 :(得分:4)
我认为pop()
函数应返回的是endEl.object
。
答案 1 :(得分:1)
你的代码太冗长了。 堆栈是一种可以有效推送和 pop 元素的数据结构。但是你的代码必须遍历两个操作的整个堆栈(即运行在 O(n)而不是 O(1)时间。)。
作为附加内容,在您的列表前面提高效率。
高效推送的示例:
public void push(Object o) {
firstItem = new List(o, firstItem);
size++;
}