【问题标题】:FIFO queue structure based on a singly linked list基于单链表的FIFO队列结构
【发布时间】:2020-10-13 13:01:23
【问题描述】:

在我现在学习的java课程中,我需要实现一个基于单链表的先进先出队列结构。我必须实现接口并覆盖 3 个方法:add、poll 和 peek。

我被 poll 和 peek 卡住了,并且无法在 return 语句中无法获得 Object。或者可能有另一种方法来做到这一点。如有任何帮助将不胜感激。

add - 使用 add() 方法将元素添加到队列中
poll - 获取和删除队列头部的元素
peek- 作为池而不删除

public class Queue<T> implements Queue2<T> {

    Node<T> head;
    Node<T> tail;
    int size;

    @Override
    public boolean add(T e) {

        Node<T> node = new Node(e);

        if (head == null) {
            head = node;
            tail = node;
        } else {

            tail.next = node;
            tail = node;
            node.next = null;
        }
        size++;
        return true;
    }


    @Override
    public T poll() {
        if (size == 0)
            return null;
        else {
            T obj = head.getObject();
            head = head.next;
            if (head == null) {
                tail = null;
            }
            size--;

            return obj;
        }

    }

    @Override

    public T peek() {
        if (head == null)
            return null;
        else {

            return head.getObject();

        }
    }


    class Node<T> {
        Node<T> next;

        Node<T> value;

        public <T> Node(T value) {


        }

        public T getObject() {
            **return null;** // what should be returned here?
        }
    }
}
 public static void main(String[] args) {
        Queue<String> queue1 = new Queue<>();
        queue1.add("finns");
        queue1.add("bella");
        queue1.add("ssara");
        queue1.add("nanna");
        queue1.add("anna");
       System.out.println(queue1.peek());
       System.out.println(queue1.poll());

【问题讨论】:

  • "can't get an Object in return statement": 请解释一下。
  • 我的猜测是 getObject 应该返回初始化节点的值,即在您的示例字符串中,例如“finns”、“bella”等。此外,您可能需要重新考虑是否value 字段实际上应该是 Node 或者它是否应该是泛型类型 T。

标签: java linked-list queue


【解决方案1】:
class Node<T> {
    Node<T> next;
    T value;
    public Node(T value) {
        this.value=value;
    }

    public T getObject() {
        return value;
    }
}

Node 中的值是您的对象,因此应该是 T 类型,而不是 Node&lt;T&gt;

从构造函数中删除&lt;T&gt;,否则你定义了一个新的T并且赋值this.value=value;将不起作用。

【讨论】:

  • ahhhhh,那些错误)谢谢!
猜你喜欢
  • 2012-04-30
  • 1970-01-01
  • 2021-01-24
  • 1970-01-01
  • 2013-06-18
  • 1970-01-01
  • 1970-01-01
  • 2010-11-29
  • 2023-04-03
相关资源
最近更新 更多