[英]java double linked list, simple linked list convert to double linked list
我一直被要求将我的简单链表转换为双链表,如果有人可以给我一些指导的话。 我不喜欢欣赏..当我使用insertapres(elements)插入元素时,我应该将新节点放入temp节点吗???
public class dlink {
private static class node{
private Object element;
private node next;
private node prev;
public node(Object element){
this.element = element;
next = null;
prev= null;
}
}
因此,似乎您想在其他两个节点的中间插入一个节点。
您需要做的是创建一个新节点,为上一个和下一个节点设置precedent
和suivant
指针,并更新上一个和下一个节点的指针,如下所示:
因此,如果您更改代码以执行此操作,则将如下所示:
// Insert a new node after position
public void insererApres(Object element){
if(debut == null)
insererDebut(element);
else if (position == fin)
insererFin(element);
else {
// First, create the new node
Noeud nouveau = new Noeud(element);
// Set the pointers
nouveau.suivant = position.suivant;
nouveau.precedent = position;
// Update the previous node pointer
nouveau.precedent.suivant = nouveau;
// Update the next node pointer
nouveau.suivant.precedent = nouveau;
position = position.suivant;
nbElement++;
}
}
您还必须更改其他方法,以始终使precedent
和suivant
指向上一个/下一个节点:
public void insererDebut(Object element){
Noeud noeud = new Noeud(element);
noeud.suivant = debut;
if (noeud.suivant!=null)
noeud.suivant.precedent = noeud;
debut = noeud;
if (nbElement == 0)
fin = debut;
position = debut;
nbElement++;
}
public void insererFin(Object element){
if(debut == null)
insererDebut(element);
else{
fin.suivant = new Noeud(element);
fin.suivant.precedent = fin;
fin = fin.suivant;
position = fin;
nbElement++;
}
}
不仅您的insertionapres()
方法,而且在所有方法中都需要一个临时文件。 例如,在你的insererDebut()
函数,你应该设置suivant
和precedent
变量。
public void insererDebut(Object element){
Noeud n = new Noeud(element);
nbElement++;
if (nbElement == 0){
debut = n
fin = debut;
}else{
debut.precedent = n;
n.suivant = debut;
debut = n;
}
}
我不确定您的position
变量是做什么用的。
其他两种方法应该类似地工作
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.