java中的单向链表和双向链表,双向循环链表java_1

  java中的单向链表和双向链表,双向循环链表java

  双向链表,也叫双链表,是一种链表,其中每个数据节点有两个指针,分别指向直接后继和直接前任。因此,从双向链表中的任何一个节点开始,你都可以很容易地访问它的前驱结点后继结点.

  下图是一个双向链表的逻辑结构图。与单链表不同,双链表中的每个节点都包含两个节点和一个数据字段的指针引用,分别指向上一个节点和下一个节点。

  与单链表相比,双向链表的这种结构在这方面得到了改进。通过引用前后节点,整个链表可以由前向后遍历一个给定值,大大提高了遍历查询的效率,在一定程度上解决了单链表的性能问题。然而,与此同时,链表的存储成本也随之增加。我们熟悉的链表底层就是通过这个原理实现的。

  不用多说,相信通过上面的讲解你已经明白了。下面可以直接加载代码,结合代码和图结构可以理解双向链表。

  公共类doublelinktestt {/* * *内部构造节点类* * @ param t */privateclassnodet { privatetdata;私有节点next//指向下一个节点的引用私有节点prev//指向上一个节点的引用公共节点(tdata){ this . data=data;} }私有NodeT头;//模拟头节点private nodelast//模拟尾节点private NodeT other//临时设置一个临时节点作为指针节点private int lengthpublic void DoubleLinkTest(){ head=new NodeT(null);最后=头;长度=0;} public void DoubleLinkTest(T data){ head=new NodeT(data);最后=头;长度=0;}/* * *链表是否为空* * @ return */public boolean isempty(){ return length==0;}/* * *普通加法,add * * @ param data */public void add(tdata){ if(isempty()){//链表为空,新建链表head=new NodeT(data);最后=头;长度;} else { other=new NodeT(data);other.prev=lastlast.next=其他;//在结构上将新节点与原尾节点关联last=other//other将是最后一个节点长度;}}/* * *在指定数据后添加数据* * @ param data * @ paramsinsertdata */public void Add after(tdata,t insertdata){ other=head;而(其他!=null) {//我们假设这个头不是空的。if(other . data . equals(data)){ NodeT t=new NodeT(insert data);t.prev=其他;t . next=other . next;//定义一个指向新插入数据的other . next=t;if(t . next==null){ last=t;}长度;}其他=other.next}}/* * * Delete,删除指定数据* * @ param data */public void remove(tdata){ other=head;//我们假设这个头不是空的。而(其他!=null){ if(other . data . equals(data)){ other . prev . next=other . next;长度-;}其他=other.next}}/* * *测试打印数据*/公共void打印列表(){ other=headfor(int I=0;I长度;I){ system . out . println(other . data );other=other.next} } public static void main(String[]args){ DoubleLinkTestInteger link=new DoubleLinkTestInteger();link . add(1);link . add(2);link . add(3);link . add(5);link . add(6);link . add(7);link . print list();system . out . println(=============);system . out . println(====3=======)后加一个数据开始;link.addAfter(3,99);link . print list();System.out.println(====在3之后添加一个数据结尾======== r n );System.out.println(====删除一个数据start========);link . remove(99);link . print list();system . out . println( r n );}}运行main函数,可以看到控制台的打印输出:

  这就是本文的全部内容。希望对大家的学习有所帮助,也希望大家能支持它的盛行。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: