首页 > 解决方案 > 如何在java中做一个循环双向链表添加方法

问题描述

我正在循环的 DoublyLinkedList 类以及 Node 内部类中实现 add(E) 方法。

Node 应该作为私有内部类来实现。

DoubleLinkedList 的“first”属性应该指向列表中的第一个节点。它的“大小”属性应该存储列表中元素的数量。

我在我的 add 方法上苦苦挣扎,因为感觉没有什么问题,而且我不知道我还能添加什么代码来修复它。

因此简单介绍一下add方法应该做什么。

add(E) 方法应该将 value 参数添加到列表的末尾。请务必解决列表为空和/或添加的元素是列表中的第一个的情况。

这是我的代码:

public class DoublyLinkedList<E>
{
private Node first;
private int size;

@SuppressWarnings("unchecked")
public void add(E value)
{
    if(first == null)
    {
        first = new Node(value, null, null);
        first.next = first;
        first.prev = first;
    }
    else
    {
        first = new Node(value, first.next, first.prev);
        first.next = first.prev;
        first = first.next;
        first.prev = first;
    }
    size++;
}
private class Node<E>
{
    private E data;
    private Node next;
    private Node prev;

    public Node(E data, Node next, Node prev)
    {
        this.data = data;
        this.next = next;
        this.prev = prev;
    }
  }
 }

标签: javanodesdoubly-linked-list

解决方案


以最小更改修复的代码(只是 add 中的 else 情况):

class DoublyLinkedList<E>
{
    private Node first;
    private int size;

    public void add(E value)
    {
        if(first == null)
        {
            first = new Node(value, null, null);
            first.next = first;
            first.prev = first;
        }
        else
        {
            first.prev.next = new Node(value, first, first.prev);
            first.prev = first.prev.next;
        }
        size++;
    }

    private class Node<E>
    {
        private E data;
        private Node next;
        private Node prev;

        public Node(E data, Node next, Node prev)
        {
            this.data = data;
            this.next = next;
            this.prev = prev;
        }
    }
}

推荐阅读