首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java双向链表,简单链表转换为双向链表

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

Stack Overflow用户
提问于 2014-03-08 09:43:56
回答 2查看 139关注 0票数 0

我被要求将我的简单链表转换为双向链表,如果有人能给我一点指导的话。我很感谢你..当我插入带有insertionapres(元素)的元素时,我是否应该将新节点放在temp节点中?

代码语言:javascript
复制
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;
     }
 }
EN

回答 2

Stack Overflow用户

发布于 2014-03-08 10:23:44

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

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

所以,如果你改变你的代码来做这件事,它会是这样的:

代码语言:javascript
复制
// 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始终指向上一个/下一个节点:

代码语言:javascript
复制
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++;
    }               
}
票数 1
EN

Stack Overflow用户

发布于 2014-03-08 10:23:30

不仅仅是你的insertionapres()方法,而且在你的所有方法中,你都需要一个临时的。例如,在insererDebut()函数中,您应该设置suivantprecedent变量。

代码语言:javascript
复制
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变量是用来做什么的。

另外两种方法的工作方式应该类似。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22263914

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档