我现在只是在Java中瞎搞,试图使用链表实现类似于堆栈的东西。
class ListStack {
int value;
int size;
ListStack next;
public ListStack (int add) {
this.size = 1;
this.value = add;
this.next = null;
}
public void push (int add) {
this.next = this;
this.value = add;
this.size++;
}
public int pop() {
if (this.size == 0) { throw new EmptyListStackException(); }
int i = this.value;
this = this.next;
this.size--;
return i;
}
public int size() {
return this.size;
}
public int peek() {
return this.value;
}
}
基本上它是一个在前面插入的链表,同时也可以从前面删除。当我尝试运行this = this.next
;时,NetBeans弹出一个错误,它说我不能重新分配最终值this
。
我希望我的最终实现能够像下面这样做:
ListStack var = new ListStack(5); //var is now 5 -> null
var.push(3); //var is now 3 -> 5 -> null
int val = varr.pop(); //var is now 5 -> null, val == 3
对于这段代码,只需注释掉this = this.next
部分即可,其他部分似乎都可以工作。
ListStack a = new ListStack(5);
System.out.println(a.size()); //prints 1
System.out.println(a.peek()); //prints 5
a.push(4);
System.out.println(a.size()); //prints 2
System.out.println(a.peek()); //prints 4
a.push(6);
System.out.println(a.size()); //prints 3
System.out.println(a.peek()); //prints 6
a.push(1);
System.out.println(a.size()); //prints 4
System.out.println(a.peek()); //prints 1
//a is 1 -> 6 -> 4 -> 5 -> null
this
。你需要做的是为列表设置一个锚定对象,否则你就无法添加/删除列表的头部。 - Hot Lickspush
都应该存储一个数字并增加另一个数字,那么是的,它按照预期工作。按照这个标准,当pop
甚至无法编译时,它也是按照预期工作的。 - Hot Licks