Java 如何将单链接列表更改为双链接列表?

Java 如何将单链接列表更改为双链接列表?,java,singly-linked-list,doubly-linked-list,Java,Singly Linked List,Doubly Linked List,我目前正在上一门Java课程,教授告诉我们理解链接的一个好方法是制作一个双链接列表。我制作了一个单链表,但我在将其转换为双链表时遇到了困难。所以我想知道是否有人能给我一些建议,以确保我的最后一个号码连接到前一个号码?如果前面的号码和最后一个号码连接到空。这是代码的一部分,如果你想要更多的代码,请询问,我将发布 用于添加元素等的代码。这是我试图使尾部连接到最后一个数字的尝试 public void add(int element){ Node n = new Node()

我目前正在上一门Java课程,教授告诉我们理解链接的一个好方法是制作一个双链接列表。我制作了一个单链表,但我在将其转换为双链表时遇到了困难。所以我想知道是否有人能给我一些建议,以确保我的最后一个号码连接到前一个号码?如果前面的号码和最后一个号码连接到空。这是代码的一部分,如果你想要更多的代码,请询问,我将发布

用于添加元素等的代码。这是我试图使尾部连接到最后一个数字的尝试

public void add(int element){

            Node n = new Node();
            n.setItem(element);
            n.setNext(head);
            head = n;
            >
            //The tail connected to the new number added.
            n.setItem(element);
            n.setBefore(tail);
            tail = n;
下面的代码是insert函数,我需要确保新插入的块连接,但我很难想出一种方法使它同时连接这两个块

public void insert(int element, int position){

        int currentposition = 0;
        Node currentNode = head;

        //Traverse to the right position
        while(currentposition < position-1){

            currentposition++;
        } 
        Node n = new Node();
        n.setItem(element);
        n.setNext(currentNode.getNext());
        currentNode.setNext(n);

        //The previous number connecting to the new number
        currentNode = tail;

    }
public void插入(int元素,int位置){
int currentposition=0;
节点当前节点=头;
//横移到正确的位置
同时(当前位置<位置-1){
currentposition++;
} 
节点n=新节点();
n、 集合项(元素);
n、 setNext(currentNode.getNext());
currentNode.setNext(n);
//连接到新号码的上一个号码
currentNode=tail;
}

您可以为保存其上一个节点的每个节点添加一个额外的节点字段

插入伪码:

insert(Node n, index i) {
    currentIndex = 0
    currentNode = head
    while (currentIndex < i) {
      currentNode = currentNode.next
      currentIndex++
    }
    n.prev = currentNode
    n.next = currentNode.next
    currentNode.next = n
}
insert(节点n,索引i){
currentIndex=0
当前节点=头
while(当前索引
对于双链接列表,您需要在类中添加head和tail字段,以便它维护双链接数据结构

private Node<T> head = null;
private Node<T> tail = head;
private int size = 0;

列表中的每个节点现在都应该有一个
previous
引用。您还应该有一个对
first
last
的引用,因此我应该添加一个对前一个节点的引用,换句话说,我应该添加一个对我当前节点的引用?您的第一个(头部)节点应该有
prev->null
next->[下一个节点]
。下一个节点应该有
prev->head
next->[下一个节点或null]
@nachokk:所以我应该将当前节点引用到第一个节点和最后一个节点?例如使用n.setNext()连接到最后一个和下一个节点?
public void add(T element) {
    Node<T> node = new Node<T>(element);
    Node<T> current = head;
    if(current == null) {
        current = node;
        head = tail = current;
    } else {
        tail.next = node;
        node.prev = tail;
        tail = node;
    }
    size++;
}
public void insert(T a, int position) {
    if (position < 0 || position > size)
        throw new IndexOutOfBoundsException();
    Node<T> node = new Node<T>(a);
    Node<T> temp;
    if(position == 0) {
        if(head == null)
            add(a);
        else {
            temp = head;
            head = node;
            node.next = temp;
            temp.prev = node;
        }
        return;
    } else if (position == size) {
        temp = tail;
        tail = node;
        temp.next = tail;
        tail.prev = temp;
        return;
    }

    Node<T> current = head;
    int i = 0;
    while (current != null && i < position-1) {
        current = current.next;
        i++;
    }

    temp = current.next;
    current.next = node;
    node.prev = current;
    node.next = temp;
    temp.prev = node;
}