当前位置: 首页 > 知识库问答 >
问题:

在Java创建自己的LinkedList类

傅英喆
2023-03-14

好吧,所以我试图在Java创建自己的LinkedList类(带有泛型类型),但是遇到了一些问题。我创建了一个LinkedListNode类,它基本上设置并获取next和right指针以及节点的键。我的LinkedList类代码发布在下面,如果您编译并运行,您会发现它没有按照应该的方式设置列表。此刻,我正在尝试在节点x之后插入节点y,但我的打印输出看起来像:

键:5-上一键:6-下一键:6键:6-上一键:null-下一键:null

我的代码:

public class LinkedList<T> {

    private LinkedListNode<T> m_head = null;
    private LinkedListNode<T> m_tail = null;

    public LinkedList() {
        m_head = new LinkedListNode<T>();
        m_tail = new LinkedListNode<T>();
        m_head.setNext(m_tail);
        m_tail.setPrev(m_head);
    }

    public LinkedListNode<T> getHead() {
        return m_head;
    }

    public LinkedListNode<T> getTail() {
        return m_tail;
    }

    public void insert(LinkedListNode<T> node, LinkedListNode<T> prev_node) {
        prev_node.getNext().setPrev(node);
        node.setPrev(prev_node);
        node.setNext(prev_node.getNext());
        prev_node.setNext(node);
    }

    public void delete(LinkedListNode<T> node) {

    }

    @Override
    public String toString() {
        LinkedListNode<T> pointer = m_head.getNext();
        String result = "";
        while(pointer.getKey() != null) {
            T prev_key = pointer.getPrev() == null ? null : pointer.getPrev().getKey();
            T next_key = pointer.getNext() == null ? null : pointer.getNext().getKey();
            result += "\nKey: " + pointer.getKey() + " - prev key: " + prev_key + " - next key: " + next_key;
            pointer = pointer.getNext();
        }
        return result;
    }

    public static void main(String[] args) {
        LinkedListNode<Integer> x = new LinkedListNode<Integer>(5);
        LinkedListNode<Integer> y = new LinkedListNode<Integer>(6);
        LinkedList<Integer> list = new LinkedList<Integer>();
        list.insert(x, list.getHead());
        list.insert(y, x);
        System.out.println(list.toString());
    }

}

linkedListNode.java:

public class LinkedListNode<T> {

    private T m_key;
    private LinkedListNode<T> m_next = null;
    private LinkedListNode<T> m_prev = null;

    public LinkedListNode() {

    }

    public LinkedListNode(T key) {
        m_key = key;
    }

    public T getKey() {
        return m_key;
    }

    public void setKey(T key) {
        m_key = key;
    }

    public LinkedListNode<T> getNext() {
        return m_next;
    }

    public LinkedListNode<T> getPrev() {
        return m_next;
    }

    public void setNext(LinkedListNode<T> node) {
        m_next = node;
    }

    public void setPrev(LinkedListNode<T> node) {
        m_prev = node;
    }

}

共有1个答案

蓝苗宣
2023-03-14

您尝试实现的是双链表(如您有next和previous一样的双链表)。

而且你的结构设计有问题,保持头部和尾部可以问题的倾向。

您应该尝试使用引用其他元素的单个元素来实现它。

LinkedListNode<T> header = new LinkedListNode<T>(); 

header.getNext(); // head
header.getPrevious()//tail 

insert的示例

 public void insert(T element) { //We add to the begin

     LinkedListNode<T> newElement = LinkedListNode<T>(element);

     newElement.setNext(header); //previous begin we set to be next
     newElement.setPrevious(header.getPrevious()); //previous end we set to be end. 

     newElement.getPrevious().setNext(newElement); //to previous end we set new begin.
     newElement.getNext().setPrevious(newElement); //to previous begin we set new end. 

 }
 类似资料:
  • 问题内容: 我用Java创建了一个程序,并对其进行了设计,以使我希望它们出现在主体中的方法(getter方法)在启动包含这些方法的类之后可以轻松地调用它们。 问题是,我需要使这个应用程序(包含getter方法)像一个API,以便我可以让我的应用程序供开发人员在需要时使用我的函数(getter方法),并且只使用它们所需要的功能。需要添加此文件(我认为完成后的API显示为.jar文件)。 我该如何做到

  • 当我们使用术语"类库"时,我们一般指的是位于libraries 文件夹中的类,它们在wiki的"类库参考"这个板块被讨论.在当前这个话题中,我们将讨论如何在 application/libraries 文件夹中建立你自己的类库,并使它们与全框架的资源维持分离. 作为一个额外的功能,当你需要在原始类中简单地添加一些功能时,CodeIgniter能使你的类库extend 自原始类.你甚至可以通过在ap

  • 如果你只需要掌控一个应用的全部的消息和触发的事件,那么使用默认的**/**命名空间即可。如果你想要利用第三方代码,或者分享你的代码给别人,http://socket.io提供了一种命名一个socket的途径。 使用多路由控制一条单一的连接是有好处的。比如下方的示例代码,客户端发起两个WebSocket连接,而服务器端使用多路由技术仅仅只需要建立一个连接。 服务器端(app.js) var io =

  • 问题内容: 我正在研究一个稀疏矩阵类,该类需要使用数组来存储矩阵的值。数组的每个元素(即每个)代表矩阵的一行。并且,数组中的每个元素代表一列和存储的值。 在我的课程中,我将数组声明为: 并且,在的构造函数中SparseMatrix,我尝试定义: 我最终得到的错误是 无法创建的通用数组 因此,我有两个问题: 我做错了什么 如果无法创建数组,为什么在数组的声明中可以接受该类型? 是我创建的课程。而且,

  • 如果您在开发共享库的公司工作,或者您在开源或商业库中工作,则可能需要开发自己的自动配置。 自动配置类可以捆绑在外部jar中,仍然可以通过Spring Boot获取。 自动配置可以与“启动器”相关联,该“启动器”提供自动配置代码以及您将使用它的典型库。 我们首先介绍了构建自己的自动配置需要了解的内容,然后我们将继续介绍创建自定义启动器所需的典型步骤。 可以使用演示项目来展示如何逐步创建启动器。 4.

  • 我试图创建自己的类型,在这些类型上我可以使用调用函数。 我如何创建自己的类型并像普通类型一样使用它们?我知道接口也不工作,但这是我的第一个猜测。