当前位置 : 主页 > 编程语言 > java >

java实现数据结构-双向链表

来源:互联网 收集:自由互联 发布时间:2021-06-28
双端链表就有效的改善插入,但对于增删改,效率还是很低,那么双向链表就有更多的改善效率 package doubleendlinklist;/** * * Title:Node * Description:节点 * Company: *@author mym *@date 2017-7-9下午7:
双端链表就有效的改善插入,但对于增删改,效率还是很低,那么双向链表就有更多的改善效率
package doubleendlinklist;

/**
 * 
 *

Title:Node

*

Description:节点

*

Company:

*@author mym *@date 2017-7-9下午7:41:16 *@version */ public class DoubleNode { public long data; //节点数据 public DoubleNode next; //下一个节点 public DoubleNode previous; //上一个结点 public DoubleNode(long value){ this.data = value; } /** * *

title:display

*

function:显示当前表头数据

*@author mym */ public void display(){ System.out.print(data + " "); } } //双向实现 package doubleendlinklist; public class DoubleLinkList { //public private DoubleNode first; //头节点 private DoubleNode end; //尾结点 public DoubleLinkList(){ first = null; end = null; } /** * 在头节点后进行插入结点 */ public void insertFirst(long value){ DoubleNode node = new DoubleNode(value); if(isEmpty()){ end = node; }else{ first.previous = node; node.next = first; } first = node; } /** * 在尾部添加结点 */ public void insertEnd(long value){ DoubleNode node = new DoubleNode(value); if(isEmpty()){ first = node; }else{ end.next = node; node.previous = end; //双向指向 } end = node; } /** *从头节点删除,修改first的值 */ public DoubleNode deleteFirst(){ DoubleNode currentNode = first; if(currentNode.next != null){ currentNode.next.previous = null; }else{ end = null; } first = currentNode.next; return currentNode; } /** * 从尾部进行删除,修改end的值 */ public DoubleNode deleteEnd(){ DoubleNode currentNode = end; if(currentNode.previous != null){ currentNode.previous.next = null; }else{ first = null; } end = currentNode.previous; return currentNode; } /** * 显示所有 */ public void display(){ DoubleNode currentNode = first; while(currentNode != null){ currentNode.display(); currentNode = currentNode.next; //指针后移一位 } System.out.println(); //换行 } /** * 根据数据查找 */ public DoubleNode find(long value){ DoubleNode currentNode = first; while(currentNode.data != value){ if(currentNode.next == null){ return null; } currentNode = currentNode.next; } return currentNode; } /** * 根据数据值删除 */ public DoubleNode deleteByValue(long value){ DoubleNode currentNode = first; if(currentNode == first){ end = null; } if(currentNode !=null){ while(currentNode.data != value && currentNode.next != null){ currentNode = currentNode.next; } } currentNode.previous.next = currentNode.next; currentNode.next.previous = currentNode.previous; //双向指向 return currentNode; } /** * 是否为空 */ public boolean isEmpty(){ return first == null; } }
上一篇:java 复制文件
下一篇:guava io
网友评论