1. //一直以为java中没有指针,其实java的引用就是指针,只不过堆栈中的引用储存了在堆中的地址,可以看做java中的指针。
    public class sibgleLink<E> {
  2. // 结点内部类
  3. private class Node {
  4. private Object data;
  5. private Node next = null;
  6.  
  7. public Node() {
  8. data = null;
  9. }
  10.  
  11. // 带数据的构造函数
  12. public Node(E data) {
  13. this.data = data;
  14. }
  15.  
  16. }
  17.  
  18. private Node head; // 头引用(指针)
  19. private Node rear; // 尾引用(指针)
  20. private Node point; // 临时引用(指针)
  21. private int length = 1; // 链表长度
  22.  
  23. // 带参数的构造函数
  24. public sibgleLink(E e) {
  25. head = new Node();
  26. head.data = e;
  27. rear = head;
  28. length = 1;
  29. }
  30.  
  31. // 尾插法
  32. public void add(E elem) {
  33. point = new Node(elem);
  34. rear.next = point;
  35. rear = point;
  36. length++;
  37.  
  38. }
  39.  
  40. // 遍历节点
  41. public void traverse() {
  42. point = head; // 移动临时引用到头结点
  43. if (head != null)
  44. System.out.print("[" + head.data + "]");
  45. while (point.next != null) {
  46. System.out.print("->[" + point.next.data + "]");
  47. point = point.next;
  48. }
  49. System.out.println();
  50. }
  51.  
  52. // 返回长度
  53. public int length() {
  54. return this.length;
  55. }
  56.  
  57. // 清除
  58. public boolean clear() {
  59. while (head.next.next != null) {
  60.  
  61. head.next = head.next.next;
  62. }
  63.  
  64. head.next = null;
  65. rear = head;
  66. point = null;
  67. length = 1;
  68. return true;
  69.  
  70. }
  71.  
  72. // 插入元素
  73. public boolean insert(int x, E data) {
  74. // 工作节点
  75. point = head;
  76. int wz = 1;
  77. if (x == 1) {
  78. Node n = new Node(data);
  79. n.next = head;
  80. head = n;
  81. length++;
  82. return true;
  83.  
  84. }
  85.  
  86. if (x < 1 || x > this.length) {
  87. return false;
  88.  
  89. } else {
  90.  
  91. while (point.next != null && wz < x - 1) {
  92. point = point.next;
  93. wz++;
  94. }
  95.  
  96. // 放入一个节点
  97. Node n = new Node(data);
  98. n.next = point.next;
  99. point.next = n;
  100. length++;
  101.  
  102. return true;
  103.  
  104. }
  105.  
  106. }
  107.  
  108. // 删除
  109. public boolean del(int x) {
  110. point = head;
  111. int wz = 1;
  112. if (x < 0 || x > length) {
  113. return false;
  114.  
  115. } else if (x == length) {
  116. point = head;
  117. while (point.next != null) {
  118. point = rear;
  119. point.next = null;
  120. length--;
  121.  
  122. }
  123.  
  124. } else {
  125.  
  126. while (point.next != null && wz < x - 1) {
  127. point = point.next;
  128. wz++;
  129. }
  130. Node d = point.next;
  131. point.next = point.next.next;
  132. d = null;
  133.  
  134. return true;
  135.  
  136. }
  137.  
  138. return false;
  139.  
  140. }
  141.  
  142. // 更改
  143. public boolean change(int x, E data) {
  144. point = head;
  145. int wz = 1;
  146. if (x < 0 || x > length) {
  147. return false;
  148.  
  149. } else {
  150.  
  151. while (point.next != null && wz < x) {
  152. point = point.next;
  153. wz++;
  154. }
  155. point.data = data;
  156.  
  157. return true;
  158.  
  159. }
  160.  
  161. }
  162.  
  163. // 移动指针
  164. private Node movePoint(int position) {
  165. if (position < 0)
  166. return head;
  167. if (position > length)
  168. return rear;
  169.  
  170. if (position >= 0 && position <= length) {
  171. point = head;
  172. while (point != null) {
  173. if (position == 0)
  174. break;
  175. position--;
  176. point = point.next;
  177. }
  178. }
  179.  
  180. return point;
  181.  
  182. }
  183.  
  184. public E find(int position) {
  185. if (position >= 0 && position < length) {
  186. Node tmp = movePoint(position);
  187. return (E) tmp.next.data;
  188. }
  189. return null;
  190. }
  191.  
  192. // test
  193. public static void main(String[] args) {
  194.  
  195. sibgleLink<Integer> si = new sibgleLink<Integer>(0);
  196. si.add(5);
  197. si.add(6);
  198. si.insert(2, 2);
  199. si.traverse();
  200. si.del(3);
  201. si.traverse();
  202. si.change(3, 77);
  203. si.traverse();
  204. System.out.println(si.length());
  205.  
  206. }
  207.  
  208. }

  结果:

  1. [0]->[2]->[5]->[6]
  2. [0]->[2]->[6]
  3. [0]->[2]->[77]
  4. 4

  

使用java实现单链表----(java中的引用就是指针)的更多相关文章

  1. Java实现单链表的各种操作

    Java实现单链表的各种操作 主要内容:1.单链表的基本操作 2.删除重复数据 3.找到倒数第k个元素   4.实现链表的反转   5.从尾到头输出链表 6.找到中间节点 7.检测链表是否有环 8.在 ...

  2. 数据结构——Java实现单链表

    一.分析 单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素.链表中的数据是以结点来表示的,每个结点由元素和指针构成.在Java中,我们可以将单链表定义成一个类,单链表的基 ...

  3. Java实现单链表反转操作

    单链表是一种常见的数据结构,由一个个节点通过指针方式连接而成,每个节点由两部分组成:一是数据域,用于存储节点数据.二是指针域,用于存储下一个节点的地址.在Java中定义如下: public class ...

  4. JAVA数据结构——单链表

    链表:一. 顺序存储结构虽然是一种很有用的存储结构,但是他有如下几点局限性:1. 因为创造线性表的时候已经固定了空间,所以当需要扩充空间时,就需要重新创建一个地址连续的更大的存储空间.并把原有的数据元 ...

  5. 使用java实现单链表(转载自:https://www.cnblogs.com/zhongyimeng/p/9945332.html)

    使用java实现单链表----(java中的引用就是指针)转载自:https://www.cnblogs.com/zhongyimeng/p/9945332.html ? 1 2 3 4 5 6 7 ...

  6. java实现单链表的增删功能

    JAVA 实现单链表的增删功能 package linked; class LinkedTable{ } public class LinkedTableTest { public static vo ...

  7. 数据结构——单链表java简易实现

    巩固数据结构 单链表java实现 单链表除了表尾 每个几点都有一个后继 结点有数据和后继指针组成  通过构建表头和表尾(尾部追加需要)两个特殊几点 实现单链表的一些操作,代码如下 package co ...

  8. 链表习题(1)-设计一个递归算法,删除不带头结点的单链表L中所有值为x的结点

    /*设计一个递归算法,删除不带头结点的单链表L中所有值为x的结点*/ /* 算法思想:设f(L,x)的功能是删除以L为首结点指针的单链表中所有值等于x的结点, 则显然有f(L->next,x)的 ...

  9. [二叉树算法]让树所有叶子节点连成一个单链表,让rchild作为 next指针

    //让树所有叶子节点连成一个单链表,让rchild作为 next指针 LNode *head=null,*pre=null;//全局变量 LNode *InOrder(BTNode *T){ if(T ...

  10. c++中的引用与指针的区别

    http://blog.csdn.net/lyd_253261362/article/details/4323691 c++中的引用与指针的区别 ★ 相同点: 1. 都是地址的概念: 指针指向一块内存 ...

随机推荐

  1. 【openCV学习笔记】【2】读取并播放一段视频

    #include <iostream> #include <opencv/highgui.h> int main(int argc, char** argv){ cvNamed ...

  2. (转)c#实现开机自启动

    RegistryKey key = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersio ...

  3. Effective java笔记2--创建于销毁对象

    一.创建对象的两种方式 1.提供公有的构造器. 2.提供一个返回类实例的静态方法. 二.使用静态方法创建对象 优势: 1.静态工厂方法的一个好处是,与构造函数不同,静态工厂方法具有名字.产生的客户端代 ...

  4. thinkphp使用自定义类方法

    1.通过Model调用 <?php /** * 积分模型 api接口 */ class ApiModel{ private $url = 'http://js.yunlutong.com/Cus ...

  5. kali 软件源 包含virtualbox所需头文件

    # deb cdrom:[Debian GNU/Linux 7.0 _Kali_ - Official Snapshot i386 LIVE/INSTALL Binary 20130905-08:50 ...

  6. Oracle redo与undo

    Undo and redo Oracle最重要的两部分数据,undo 与redo,redo(重做信息)是oracle在线(或归档)重做日志文件中记录的信息,可以利用redo重放事务信息,undo(撤销 ...

  7. XHTML1.0版本你知道么,跟html5版本有什么区别

    XHTML 1.0 是 XML 风格的 HTML 4.01. XHTML 1.1 主要是初步进行了模块化. HTML5 是下一代 HTML,取代 HTML 4.01. W3C 原本确实计划用 XHTM ...

  8. python's seventh day for me set

    数据类型的补充: 对于元祖:  如果只有一个元素,并且没有逗号,此元素是什么数据类型,该表达式就是什么数据类型. tu = ('顾清秋') tul = ('顾清秋',) print(type(tu)) ...

  9. win7系统程序未响应怎么办

    问题描述:出现“程序未响应...”而后系统程序就没有反应了. 解决方案:1.运行→输入“regedit”→hkey_current_usser/control panel/desktop/window ...

  10. oracle10g Error in invoking target 'install' of makefile

    oracle10g series error error in invoking target 'install' of makefile /u01/app/oracle/oracle/product ...