Java单向链表操作详解

转自:http://blog.csdn.net/zxman660/article/details/7786354

——————————————————————————————————————————

  1. /* 先定义一个Node类用来存储节点的值域和指针域
  2. * 即当前节点中的值和后面节点的方法
  3. * 在C中就是相当与定义一个结构体类型一个数据域和指针域的方法
  4. */
  5. class LNode{//这个写法已经非常固定了 设置两个属性分别用set函数和get函数来得到这两个属性
  6. private int data;
  7. private LNode next;//这个和String应该比较相似的用法,类名用来表示数据类型,表示next的数据类型也是节点
  8. public void setData(int data){
  9. this.data = data;
  10. }
  11. public int getData(){
  12. return this.data ;
  13. }
  14. public void setNext(LNode next){
  15. this.next = next;
  16. }
  17. public LNode getNext(){
  18. return this.next;
  19. }
  20. }
  21. /*
  22. * 定义一个链表主类,并且定义各种对链表操作的方法
  23. */
  24. public class Linklist {
  25. public LNode head;//定义一个头结点
  26. /*
  27. * 定义一个创建链表的方法
  28. * 该方法称之为 :尾插法:新产生的节点从尾部插入链表
  29. */
  30. public void createlink(int [] a){
  31. LNode pnew;//定义pnew表示新产生的结点
  32. LNode ptail=new LNode();//为尾节点分配堆内存
  33. head=ptail;//初始时是头结点与尾节点相等
  34. for(int i=0;i<a.length;i++){
  35. pnew=new LNode();//为新产生的节点分配堆内存
  36. pnew.setData(a[i]);//传递data值
  37. ptail.setNext(pnew);//把新产生的节点设置为ptail的后继节点
  38. pnew.setNext(null);//把新产生的节点的后继节点设为空
  39. ptail=pnew;//移动 ptail节点的位置使之一直指向尾部
  40. }
  41. }
  42. /*
  43. * 定义判断链表中元素是否存在的方法
  44. */
  45. public void seachlink(int value){
  46. LNode ptr;
  47. ptr=head.getNext();
  48. while(ptr!=null){//在节点非空的情况下寻找匹配的的值
  49. if(value==ptr.getData()){//匹配成功是
  50. System.out.println("找到数据:"+ptr.getData());
  51. break;//退出循环
  52. }
  53. else{//当当前值不是要查找的值时,查找下一个
  54. ptr=ptr.getNext();
  55. }
  56. }
  57. if(ptr==null)//链表遍历完毕,没有找到时
  58. System.out.println("链表中没有要查找数据");
  59. }
  60. /*
  61. * 定义一个删除节点的方法
  62. */
  63. public void deletelink(int value){
  64. LNode ptr;
  65. LNode p;
  66. p=head;
  67. ptr=head.getNext();
  68. while(ptr!=null){
  69. if(value==ptr.getData()){//判断链表中的当前值是否是要删除的节点
  70. p.setNext(ptr.getNext());//把ptr的后继节点设置为p的后继节点,即在形式上在链表中删除了ptr节点
  71. // System.gc();
  72. System.out.println("删除数据"+value+"成功!");
  73. break;
  74. }
  75. else{
  76. p=ptr;//p指向ptr位置
  77. ptr=ptr.getNext();//ptr指向其直接后继位置
  78. }
  79. }
  80. if(ptr==null)
  81. System.out.println("链表中没有要删除的数据!");
  82. }
  83. /*
  84. * 定义插入节点的方法
  85. */
  86. public void insertlink(int pos,int value){//两个参数,一个表示插入的位置,另一个表示插入的值
  87. LNode ptr;
  88. LNode pnew;//实例化新节点
  89. ptr=head.getNext();
  90. while(ptr!=null){
  91. if(pos==ptr.getData()){
  92. pnew=new LNode();
  93. pnew.setData(value);
  94. pnew.setNext(ptr.getNext());
  95. ptr.setNext(pnew);//
  96. System.out.println("插入数据"+value+"成功!");
  97. break;
  98. }
  99. else{
  100. ptr=ptr.getNext();
  101. }
  102. }
  103. if(ptr==null)
  104. System.out.println("插入数据失败!");
  105. }
  106. /*
  107. * 定义一个输出链表内容方法
  108. */
  109. public void printlink(){
  110. LNode ptr;//实例化一个节点
  111. ptr=head.getNext();//该节点取得头结点的后继节点
  112. while(ptr!=null){
  113. System.out.print(ptr.getData()+"->");
  114. ptr=ptr.getNext();
  115. }
  116. System.out.println(" NULL");
  117. }
  118. /*
  119. * 下面给出一个测试用例,用数组创建一个整型的链表,并且把它输出
  120. */
  121. public static void main(String args[]){
  122. int a[]=new int [10];
  123. for(int i=0;i<a.length;i++){
  124. a[i]=i;
  125. }
  126. Linklist list=new Linklist();
  127. list.createlink(a);
  128. System.out.println(" 链表输出如下:");
  129. list.printlink();
  130. System.out.println(" 插入元素后链表的输出如下:");
  131. list.printlink();
  132. }
  133. }
时间: 2024-10-09 12:24:42

Java单向链表操作详解的相关文章

Java RandomAccessFile文件操作详解

简介: RandomAccessFile类可以对文件随机访问的操作,访问包括读和写操作.该类的读写是基于指针的操作. RandomAccessFile对文件进行随机访问操作时有两个模式,一种是只读(r),另一种是读写(rw),需在创建RandomAccessFile对象时传入一个参数进行设置,第一个参数代表要访问的文件,第二个参数代表设置访问模式 RandomAccessFile(File file,String mode) RandomAccessFile(String filename,St

Java常用日期操作详解

Date类型大多数时间分量计算方法已经被Calendar取代 Date常用方法setTime getTime() new Date();默认获取当前的时间 SimpleDateFormat用来格式化和解析日期的具体类 匹配日期的字符串 y–>年 M–>月 d–>日 E–>星期 a–>上下午 H–>小时(24小时制) h–>小时(12小时制) m–>分 s–>秒 格式化Date返回值为String SimpleDateFormat sdf = new S

Java路径操作详解

1.基本概念的理解 绝对路径:绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,(URL和物理路径)例如: C:\xyz\test.txt 代表了test.txt文件的绝对路径.http://www.sun.com/index.htm也代表了一个 URL绝对路径. 相对路径:相对与某个基准目录的路径.包含Web的相对路径(HTML中的相对目录),例如:在 Servlet中,"/"代表Web应用的根目录.和物理路径的相对表示.例如:". /" 代表当前目录, &q

Java虚拟机工作原理详解

原文地址:http://blog.csdn.net/bingduanlbd/article/details/8363734 一.类加载器 首先来看一下java程序的执行过程. 从这个框图很容易大体上了解java程序工作原理.首先,你写好java代码,保存到硬盘当中.然后你在命令行中输入 [java] view plaincopy javac YourClassName.java 此时,你的java代码就被编译成字节码(.class).如果你是在Eclipse IDE或者其他开发工具中,你保存代码

java classLoader体系结构使用详解

原创整理不易,转载请注明出处:java classLoader体系结构使用详解 代码下载地址:http://www.zuidaima.com/share/1774052029516800.htm jvm classLoader architecture: Bootstrap ClassLoader/启动类加载器 主要负责jdk_home/lib目录下的核心 api 或 -Xbootclasspath 选项指定的jar包装入工作. Extension ClassLoader/扩展类加载器  主要负

DNS基本概念及操作详解----------------转载

DNS基本概念及操作详解 目录: 1.DNS协议 2.DNS查询 2.1递归查询 2.2跌代查询 2.3反向查询 3.域维护 3.1全量AXFR传输 3.2增量IXFR传输 3.3通过NOTIFY 3.4动态更新 4.DNS安全 在很多人看来,DNS只是为外部提供DNS解析服务(我以前也是这么认为的,直到膝盖中了一箭),但作为互联网的基础设施,DNS远没有想象的那么简单.如果你没有听说过DNS查询.反向解析.zone传输.动态更新.DNS安全,那你可以从本文中得到关于他们的最简明的诠释. 一.

OSCache操作详解+标签使用

OSCache操作详解+标签使用 1.OSCache是什么?    OSCache标记库由OpenSymphony设计,它是一种开创性的缓存方案,它提供了在现有JSP页面之内实现内存缓存的功能.OSCache是个一个被广泛采用的高性能的J2EE缓存框架,OSCache还能应用于任何Java应用程序的普通的缓存解决方案. 2.OSCache的特点   (1) 缓存任何对象:你可以不受限制的缓存部分jsp页面或HTTP请求,任何java对象都可以缓存. (2) 拥有全面的API:OSCache AP

【甘道夫】HBase基本数据操作详解【完整版,绝对精品】

引言 之前详细写了一篇HBase过滤器的文章,今天把基础的表和数据相关操作补上. 本文档参考最新(截止2014年7月16日)的官方Ref Guide.Developer API编写. 所有代码均基于"hbase 0.96.2-hadoop2"版本编写,均实测通过. 欢迎转载,请注明来源: http://blog.csdn.net/u010967382/article/details/37878701 概述 对于建表,和RDBMS类似,HBase也有namespace的概念,可以指定表空

【java项目实践】详解Ajax工作原理以及实现异步验证用户名是否存在+源码下载(java版)

一年前,从不知道Ajax是什么,伴随着不断的积累,到现在经常使用,逐渐有了深入的认识.今天,如果想开发一个更加人性化,友好,无刷新,交互性更强的网页,那您的目标一定是Ajax. 介绍 在详细讨论Ajax是什么之前,先让我们花一分钟了解一下Ajax做什么.如图所示: 如上图展示给我们的就是使用Ajax技术实现的效果.伴随着web应用的越来越强大而出现的是等待,等待服务器响应,等待浏览器刷新,等待请求返回和生成新的页面成为了程序员们的最最头疼的难题.随着Ajax的出现使web应用程序变得更完善,更友