在java项目中怎么设计双链表

  介绍

这篇文章将为大家详细讲解有关在java项目中怎么设计双链表,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

<强>双链表的设计

双链表的主要优点是对于任意给的结点,都可以很轻易的获取其前驱结点或者后继结点,而主要缺点是每个结点需要添加额外的下一个域,因此需要更多的空间开销,同时结点的插入与删除操作也将更加耗时,因为需要更多的指针指向操作。双链表的结构图如下:,

霸趈ava项目中怎么设计双链表”,,

创建HeadDoubleILinkedList类并实现IlinekedList接口(和上篇博文的接口一样)

/* *   *由zejian>包com.zejian.structures.LinkedList.doubleLinked;/* *   *由zejian alt="在java项目中怎么设计双链表”>,,

从图可以看出(a)和(b)属于同种情况,需要注意。下一个!=null的情况,否则就会抛空指针,而(c)的情况属于中间插入无需无需理会前面。接下来!=null的条件,因为中间插入时无论如何其后继结点时不会为零的,插入方法的实现代码如下:

/* *   *插入结点   * @param指数   * @param数据   * @return   */@Override   公共逻辑加(int指数T数据){   如果(index<0 | | data=https://www.yisu.com/zixun/=null)   把新NullPointerException(“指数<0 | |数据==null”);      int j=0;   DNode =this.head面前;//查找要插入结点位置的前一个结点   (前面。下一个!=null & & j <指数){   + +;   前面=front.next;   }//创建需要插入的结点,并让其前继指针指向前面,后继指针指向front.next   DNode q=new DNode (数据、前front.next);//空双链表插入和尾部插入,无需此操作   如果前面。下一个!=null) {//更改front.next的前继指针   front.next。prev=问;   }//更改前面的后继指针   前面。下一个=问;//在尾部插入时需要注意更新尾指向   如果(前面==this.tail) {   this.tail=问;   }   返回true;   }

<>强双链表的删除操作分析与实现

双链表的删除操作与插入操作原理上是相似的,我们可以看出(a) (b)是属于同种情况,需要防止p.next。prev抛空指针的情况,而对于(c)情况则无需关系p.next。上一页的值,删除的具体实现如下:

霸趈ava项目中怎么设计双链表"

/* *   *根据下标删除结点   * 1 .头删除   * 2,中间删除   * 3 .尾部删除,更新尾指向   * @param指数下标起始值为0   * @return   */@Override   公共T删除(int指数){      int长度尺寸=();   T temp=零;      如果(index<0 | | index>大?| | isEmpty ()) {   返回临时;   }      DNodep=this.head;   int j=0;//头删除/尾删除/中间删除,查找需要删除的结点(要删除的当前结点因此i<=指数)   而(p !=null&, j<=指数){   p=p.next;   + +;   }//当双链表只有一个结点时或尾部删除时,无需此步   如果(p.next !=null) {   p.next.prev=p.prev;   }   p.prev.next=p.next;//如果是尾结点   如果(p==this.tail) {   这一点。尾=p.prev;//更新未结点的指向   }   temp=p.data;      返回临时;   }

<>强双链表的查值操作分析与实现

双链表的查找值的操作与单链表并没有什么区别,只要找到需要查找的当前结点获取其值即可,如下:,

霸趈ava项目中怎么设计双链表”,

代码实现如下:

@Override   公共T get (int指数){   如果(index>=0)   {   int j=0;//注意起始结点为this.head.next//如果起始点为this.head时,j的判断为j<=指数,//因为需要寻找的是当前结点而不是前一个结点。   DNodepre=this.head.next;   而(前!=零,,j<指数)   {   + +;   pre=pre.next;   }   如果(pre !=null)   返回pre.data;   }   返回null;   }

<>强双链表的替换值操作分析与实现

双链表的替换值过程,需要先查找到需要替换的结点,这个过程跟获取值的过程是一样的,找到结点后直接替换值并返回旧值即可。比较简单直接上代码:

@Override   公共组T (int指数T数据){   旧T=零;   如果(index> 0,和数据!=null) {   int j=0;   DNode

在java项目中怎么设计双链表