繁体   English   中英

java双链表,简单链表转换为双链表

[英]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;
     }
 }

因此,似乎您想在其他两个节点的中间插入一个节点。

您需要做的是创建一个新节点,为上一个和下一个节点设置precedentsuivant指针,并更新上一个和下一个节点的指针,如下所示:

双向链表节点插入

因此,如果您更改代码以执行此操作,则将如下所示:

// 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++;            
    }
}

您还必须更改其他方法,以始终使precedentsuivant指向上一个/下一个节点:

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()函数,你应该设置suivantprecedent变量。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM