Java 如何将单链接列表更改为双链接列表?
我目前正在上一门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()
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;
}