Я реализовал 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() делает копию последнего элемента, так как он возвращает логическое значение? – wxyz
Непонятно, что вы просите. Также непонятно, почему вы смотрите на 2 узла впереди; похоже, что это собирается бросить NPE, когда размер == 2. –
@BrianRoach, я думаю, что когда размер равен 2, while не выполняется, и ссылка на второй элемент будет удалена -> выглядит нормально. – wxyz