全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

java 实现双向链表实例详解

java 实现双向链表实例详解

 双向链表是一个基本的数据结构,在Java中LinkedList已经实现了这种结构,不过作为开发者,也要拥有自己显示这种结构的能力。话不多说,上代码:

    首先是链表的节点类:

/** 
 * 链表节点 
 * @author Administrator 
 * 
 * @param <T> 
 */ 
public class ChainNode<T> { 
 private T data; 
 //对象编号 
 private int dataNo; 
  
 public ChainNode<T> nextChainNode; 
 public ChainNode<T> preChainNode; 
 public ChainNode(T data, ChainNode<T> nextChainNode, 
   ChainNode<T> preChainNode) { 
  this.data = data; 
  this.nextChainNode = nextChainNode; 
  this.preChainNode = preChainNode; 
 } 
  
  
  
 public ChainNode(T data) { 
  this.data = data; 
 } 
 
  
 
 public int getDataNo() { 
  return dataNo; 
 } 
 
 
 
 public void setDataNo(int dataNo) { 
  this.dataNo = dataNo; 
 } 
 
 
 public void setData(T data) { 
  this.data = data; 
 } 
 
 
 
 public T getData() { 
  return data; 
 } 
  
  
} 

 然后是链表:

<pre name="code" class="java">/** 
 * 链表实现类 
 * @author Administrator 
 * 
 * @param <T> 
 */ 
public class Chain<T> { 
 //头节点 
 private ChainNode<T> headNode; 
 //末尾节点指针 
 private ChainNode<T> lastNode; 
 private int size; 
  
  
 //创建链表就创建头节点 
 public Chain() { 
  this.headNode = new ChainNode<T>(null); 
  this.lastNode = headNode; 
   
 } 
 //增加一个节点 
 public void addNode(T data) { 
  ChainNode<T> node = new ChainNode<T>(data); 
  if(lastNode != null){ 
   lastNode.nextChainNode = node; 
   node.preChainNode = node; 
   node.setDataNo(size); 
   lastNode = node; 
   size++; 
  } 
 } 
 //删除指定索引的节点 
 public void deleteNode(int dataNo) throws Exception { 
  if(getSize() == 0){ 
   throw new Exception("chain is empty"); 
  } 
  for (ChainNode<T> node = headNode.nextChainNode;node != null;node = node.nextChainNode) { 
   if(node.getDataNo() == dataNo){ 
    node.preChainNode.nextChainNode = node.nextChainNode; 
    if(node.nextChainNode != null){ 
     node.nextChainNode.preChainNode = node.preChainNode; 
    } 
     
    node.nextChainNode = null; 
    node.preChainNode = null; 
    size--; 
    //重新设置节点的编号 
    for (ChainNode<T> chainNode = node.nextChainNode;chainNode != null;chainNode = chainNode.nextChainNode) { 
     chainNode.setDataNo(chainNode.getDataNo()-1); 
    } 
    return; 
     
   } 
  } 
  throw new Exception("the corresponding data that can not be found"); 
 } 
 //获取指定索引的节点 
 public T get(int dataNo) throws Exception { 
  if(getSize() == 0){ 
   throw new Exception("chain is empty"); 
  } 
  for (ChainNode<T> node = headNode.nextChainNode;node != null;node = node.nextChainNode) { 
   if(node.getDataNo() == dataNo){ 
    return node.getData(); 
   } 
  } 
  throw new Exception("the corresponding data that can not be found"); 
 } 
 //修改对应索引的节点 
 public void set(int dataNo,T data) throws Exception { 
  if(getSize() == 0){ 
   throw new Exception("chain is empty"); 
  } 
  for (ChainNode<T> node = headNode.nextChainNode;node != null;node = node.nextChainNode) { 
   if(node.getDataNo() == dataNo){ 
    node.setData(data); 
    return; 
   } 
  } 
  throw new Exception("the data that is to be modified can not be found"); 
 } 
 //是否包含对应数据的节点 
 public boolean isContains(T data) throws Exception { 
  if(getSize() == 0){ 
   throw new Exception("chain is empty"); 
  } 
  for (ChainNode<T> chainNode = headNode.nextChainNode;chainNode != null;chainNode = chainNode.nextChainNode) { 
   if(chainNode.getData() == data){ 
    return true; 
   } 
  } 
   
  return false; 
 } 
 //获取节点数量(不含头节点) 
 public int getSize() { 
  return size; 
 } 
} 

测试一下:

public class ChainTest { 
 public static void main(String[] args) throws Exception{ 
  String oneString = "one"; 
  String twoString = "two"; 
  String threeString = "three"; 
  String fourString = "four"; 
  Chain<String> chain = new Chain<String>(); 
  chain.addNode(oneString); 
  chain.addNode(twoString); 
  chain.addNode(threeString); 
  chain.addNode(fourString); 
  for (int i = 0; i < chain.getSize(); i++) { 
   String string2 = chain.get(i); 
   System.out.println(string2); 
  } 
  try { 
   String string = chain.get(2); 
   System.out.println("the data of the second node is"+string); 
   System.out.println(chain.isContains(fourString)); 
   chain.set(1, "haha"); 
   System.out.println("modify chain"); 
   for (int i = 0; i < chain.getSize(); i++) { 
    String string2 = chain.get(i); 
    System.out.println(string2); 
   } 
    
   chain.deleteNode(3); 
   System.out.println("delete one node"); 
   for (int i = 0; i < chain.getSize(); i++) { 
    String string2 = chain.get(i); 
    System.out.println(string2); 
   } 
  } catch (Exception e) { 
   // TODO Auto-generated catch block 
   e.printStackTrace(); 
  } 
 } 
} 

结果:

one
two
three
four
the data of the second node isthree
true
modify chain
one
haha
three
four
delete one node
one
haha
three

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# java双向链  # java双向链详解  # java双向链实例  # java数据结构之实现双向链表的示例  # Java中双向链表详解及实例  # Java实现双向链表(两个版本)  # Java语言中链表和双向链表  # JAVA实现双向链表的增删功能的方法  # java中使用双向链表实现贪吃蛇程序源码分享  # java实现单链表、双向链表  # Java双向链表按照顺序添加节点的方法实例  # java数据结构基础:单链表与双向链表  # 基于Java实现双向链表  # 链表  # 是一个  # 也要  # 数据结构  # 希望能  # 不含  # 谢谢大家  # 多说  # 测试一下  # 实现了  # nextChainNode  # dataNo  # getDataNo  # preChainNode  # size  # getData  # int  # data  # headNode  # lastNode 


相关文章: 打鱼网站制作软件,波克捕鱼官方号怎么注册?  广州商城建站系统开发成本与周期如何控制?  洛阳网站制作公司有哪些,洛阳的招聘网站都有哪些?  香港服务器网站卡顿?如何解决网络延迟与负载问题?  单页制作网站有哪些,朋友给我发了一个单页网站,我应该怎么修改才能把他变成自己的呢,请求高手指点迷津?  详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)  Swift中switch语句区间和元组模式匹配  高防网站服务器:DDoS防御与BGP线路的AI智能防护方案  怎么将XML数据可视化 D3.js加载XML  如何在建站之星绑定自定义域名?  建站上传速度慢?如何优化加速网站加载效率?  如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?  网站制作企业,网站的banner和导航栏是指什么?  内部网站制作流程,如何建立公司内部网站?  如何通过虚拟机搭建网站?详细步骤解析  制作宣传网站的软件,小红书可以宣传网站吗?  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  教程网站设计制作软件,怎么创建自己的一个网站?  兔展官网 在线制作,怎样制作微信请帖?  制作网站公司那家好,网络公司是做什么的?  深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?  建站之家VIP精选网站模板与SEO优化教程整合指南  网站制作知乎推荐,想做自己的网站用什么工具比较好?  微信小程序制作网站有哪些,微信小程序需要做网站吗?  唐山网站制作公司有哪些,唐山找工作哪个网站最靠谱?  建站ABC备案流程中有哪些关键注意事项?  宝盒自助建站智能生成技巧:SEO优化与关键词设置指南  如何通过VPS搭建网站快速盈利?  零服务器AI建站解决方案:快速部署与云端平台低成本实践  台州网站建设制作公司,浙江手机无犯罪记录证明怎么开?  历史网站制作软件,华为如何找回被删除的网站?  如何在香港服务器上快速搭建免备案网站?  IOS倒计时设置UIButton标题title的抖动问题  建站为何优先选择香港服务器?  如何在Golang中引入测试模块_Golang测试包导入与使用实践  油猴 教程,油猴搜脚本为什么会网页无法显示?  建站之星免费模板:自助建站系统与智能响应式一键生成  如何批量查询域名的建站时间记录?  建站之星备案流程有哪些注意事项?  在线教育网站制作平台,山西立德教育官网?  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  如何通过服务器快速搭建网站?完整步骤解析  浙江网站制作公司有哪些,浙江栢塑信息技术有限公司定制网站做的怎么样?  北京网站制作公司哪家好一点,北京租房网站有哪些?  免费视频制作网站,更新又快又好的免费电影网站?  网站制作的软件有哪些,制作微信公众号除了秀米还有哪些比较好用的平台?  建站主机空间推荐 高性价比配置与快速部署方案解析  如何获取PHP WAP自助建站系统源码?  无锡制作网站公司有哪些,无锡优八网络科技有限公司介绍?  制作公司内部网站有哪些,内网如何建网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。