【发布时间】:2014-01-10 08:18:34
【问题描述】:
我用如下所示的节点实现了一个 SLL
public class StudentNode<T>
{
private StudentNode<T> next;
private T std;
public StudentNode(T s)
{
this.std=s;
this.next=null;
}
public StudentNode()
{
this.std=null;
this.next=null;
}
public T getStudent()
{
return this.std;
}
public void setNext(StudentNode<T> ln)
{
this.next = ln;
}
public StudentNode<T> getNext()
{
return this.next;
}
}
我必须使用 SLL 来模拟堆栈(lifo 结构)
public class LinkedStack<T> {
private int size;
private StudentNode<T> head;
/* methods */
public boolean pop()
{
if (getSize()>1) {
StudentNode<T> ss=this.head;
for(StudentNode<T> sb=ss;sb!=null;sb=sb.getNext())
System.out.println(((Student)sb.getStudent()).avg());//prints the grade
while(ss.getNext().getNext()!=null){
ss=ss.getNext();
}
ss.setNext(null);
this.size-=1;
for(StudentNode<T> sb=this.head;sb!=null;sb=sb.getNext())
System.out.println(((Student)sb.getStudent()).avg()+"*");
return true;
}
else
if(getSize()==1){
this.head=null;
return true;
}
return false;
}
}
我必须弹出列表的最后一个元素,但它似乎让我复制了它而不是把它剪掉。我在这里错过了什么?
第一次执行:
5.0
10.0
2.0
5.0
4.0
5.0*
10.0*
2.0*
5.0*
第二次执行:
5.0
10.0
2.0
5.0
5.0
4.0
5.0*
10.0*
2.0*
5.0*
5.0*
【问题讨论】:
-
pop() 方法在返回布尔值后如何让您复制最后一个元素?
-
不清楚你在问什么。也不清楚你为什么要向前看 2 个节点;当 size == 2 时,这似乎会引发 NPE。
-
@BrianRoach,我认为当 size 为 2 时,不会执行 while 并且到第二个元素的链接将被删除 -> 看起来没问题。
-
没有他的代码是不可能的,是的。
-
@wxys 有点像这样,我在方法中包含了一些打印并用输出更新了问题
标签: java data-structures stack