我在做涉及Java中的堆栈和节点的作业时遇到了困难。我理解堆栈的概念,但与节点混淆。任务是使用堆栈(而不是java.util.Stack)来生成一个程序,它检查一个数学表达式是否有正确的()、[]和{}对。我们已经有了Node程序。因此,基本上我的问题是,我需要一些帮助来完成我的PStack类的Push方法。
PStack.java
class PStack {
private Node top;
public PStack() {
top=null;
}
public boolean isEmpty() {
return top==null;
}
public int pop() {
Node top1 = top;
top = top.getNext();
return top1.getData();
}
public void push(Node n) {
}
public int peek() {
return top.getData();
}
}Node.java
public class Node {
private int data;
private Node nextnode;
public Node(int intial) {
data = intial;
nextnode = null;
}
public int getData() {
return data;
}
public Node getNext() {
return nextnode;
}
public void setData(int newdata) {
data = newdata;
}
public void setNode(Node next1node) {
nextnode = next1node;
}
}我试过:
public void push(Node n) {
Node next = n;
top.getNext().setNode(n);
}结果:
Exception in thread "main" java.lang.NullPointerException
at javaclass.stack.pStack.push(pStack.java:24)
at javaclass.stack.StackDriver.main(StackDriver.java:17)发布于 2021-03-02 22:04:02
public void push(Node n) {
n.setNode(top);
top = n;
}编辑:
顺便说一句,这是一个奇怪的堆栈实现。看起来它想要成为一堆int原语。peek()和pop()都返回一个int。但是,push需要一个参数,它应该是堆栈本身的内部构造。它不应该将Node对象作为参数。它应该接受一个int参数,并在内部用Node对象包装它。
另外,Node.setNode应该被命名为Node.setNext。它只是更符合你正在做的事情。链接列表节点具有“下一步”成员,而双链接列表节点具有“下一步”和“先前”成员。节点对象的getter和setter应该为这些成员适当地命名。
如下所示:
PStack.java
public class PStack {
private Node top;
public boolean isEmpty() {
return top==null;
}
public int pop() {
Node top1 = top;
top = top.getNext();
return top1.getData();
}
public void push(int data) {
Node newtop = new Node(data);
newtop.setNext(top);
top = newtop;
}
public int peek() {
return top.getData();
}
}Node.java
public class Node {
private int data;
private Node next;
public Node(int data) {
this.data = data;
}
public int getData() {
return data;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
}https://stackoverflow.com/questions/66447426
复制相似问题