java - 无法从堆栈中弹出项目

标签 java data-structures stack

我实现了一个带有如下所示节点的 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*

最佳答案

首先,你的输出对我来说似乎是正确的。鉴于我猜测您的代码的意图:从链接列表中删除最后一个元素。如果我重新格式化您的输出,我会得到以下结果:

第一次执行

before  | after
5.0       5.0*
10.0      10.0*
2.0       2.0*
5.0       5.0*
4.0

第二次执行

before   | after
5.0        5.0*
10.0       10.0*
2.0        2.0*
5.0        5.0*
5.0        5.0*
4.0

因此,在这两种情况下,最后一个元素都会被删除。 (顺便说一句,您忘记更新 elseif 分支中的大小)。

其次,弹出堆栈的目的通常是删除顶部元素,即头部。不是像您当前的实现那样的底部元素。考虑到这一点,您的实现可以归结为:

public class LinkedStack<T> {

  private int size;
  private StudentNode<T> head;
  /* methods */
  public boolean pop()  
  { 
    if (this.size > 0) {
      this.head = this.head.getNext();
      this.size--;
      return true;
    } else {
      return false;
    }
  }
}

关于java - 无法从堆栈中弹出项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21039191/

相关文章:

java - 如何为 Selenium Grid 中的 session 提供无限空闲时间,但清理断开连接的 session ?

java - 如何在 Java 中访问对象 LinkedList 的数据成员的值

java - 链表堆栈实现 - Java

c# - 从 Java 调用 C# dll

java - 正确地转换泛型

python - 从嵌套的dict python中获取数据并且数据类型也是混合的

c - Shmap 3.2 恢复共享内存的指针

linux - 为什么在 linux 中为每个进程保留一个内核堆栈?

使用数组的 Java 基于字符的队列

java - 有什么关于加速克隆 HashMap 的 Java 代码的建议吗?