gat*_*tor 4 java reference this abstract-data-type
我现在只是在 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;
}
}
Run Code Online (Sandbox Code Playgroud)
基本上它是一个前面插入的链表,它也从前面删除。当我尝试这样做时,NetBeans 弹出一个错误this = this.next;它说我不能重新分配最终值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
Run Code Online (Sandbox Code Playgroud)
评论把那个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
Run Code Online (Sandbox Code Playgroud)
您的代码中有一个概念性错误:基本上,您没有使用 push 方法创建任何新的堆栈元素。
但问题是,调用类 listStack 会产生误导,因为实际上您要创建的是堆栈的新元素,因此您可能应该创建一个类节点。此外,您不能忽略“this”,因为它是一个 java 关键字,并且始终指的是当前对象。
为了提示您如何将堆栈实现为链表,您应该创建class Node一个值字段value和对前Node一个节点的引用(第一个节点将只有一个空指针)。
在类中,ListStack您应该引用最后一个节点,其push()方法应该创建一个新节点并将其设置为新的最后一个节点。