//一直以为java中没有指针,其实java的引用就是指针,只不过堆栈中的引用储存了在堆中的地址,可以看做java中的指针。
public class sibgleLink<E> {
// 结点内部类
private class Node {
private Object data;
private Node next = null; public Node() {
data = null;
} // 带数据的构造函数
public Node(E data) {
this.data = data;
} } private Node head; // 头引用(指针)
private Node rear; // 尾引用(指针)
private Node point; // 临时引用(指针)
private int length = 1; // 链表长度 // 带参数的构造函数
public sibgleLink(E e) {
head = new Node();
head.data = e;
rear = head;
length = 1;
} // 尾插法
public void add(E elem) {
point = new Node(elem);
rear.next = point;
rear = point;
length++; } // 遍历节点
public void traverse() {
point = head; // 移动临时引用到头结点
if (head != null)
System.out.print("[" + head.data + "]");
while (point.next != null) {
System.out.print("->[" + point.next.data + "]");
point = point.next;
}
System.out.println();
} // 返回长度
public int length() {
return this.length;
} // 清除
public boolean clear() {
while (head.next.next != null) { head.next = head.next.next;
} head.next = null;
rear = head;
point = null;
length = 1;
return true; } // 插入元素
public boolean insert(int x, E data) {
// 工作节点
point = head;
int wz = 1;
if (x == 1) {
Node n = new Node(data);
n.next = head;
head = n;
length++;
return true; } if (x < 1 || x > this.length) {
return false; } else { while (point.next != null && wz < x - 1) {
point = point.next;
wz++;
} // 放入一个节点
Node n = new Node(data);
n.next = point.next;
point.next = n;
length++; return true; } } // 删除
public boolean del(int x) {
point = head;
int wz = 1;
if (x < 0 || x > length) {
return false; } else if (x == length) {
point = head;
while (point.next != null) {
point = rear;
point.next = null;
length--; } } else { while (point.next != null && wz < x - 1) {
point = point.next;
wz++;
}
Node d = point.next;
point.next = point.next.next;
d = null; return true; } return false; } // 更改
public boolean change(int x, E data) {
point = head;
int wz = 1;
if (x < 0 || x > length) {
return false; } else { while (point.next != null && wz < x) {
point = point.next;
wz++;
}
point.data = data; return true; } } // 移动指针
private Node movePoint(int position) {
if (position < 0)
return head;
if (position > length)
return rear; if (position >= 0 && position <= length) {
point = head;
while (point != null) {
if (position == 0)
break;
position--;
point = point.next;
}
} return point; } public E find(int position) {
if (position >= 0 && position < length) {
Node tmp = movePoint(position);
return (E) tmp.next.data;
}
return null;
} // test
public static void main(String[] args) { sibgleLink<Integer> si = new sibgleLink<Integer>(0);
si.add(5);
si.add(6);
si.insert(2, 2);
si.traverse();
si.del(3);
si.traverse();
si.change(3, 77);
si.traverse();
System.out.println(si.length()); } }

  结果:

[0]->[2]->[5]->[6]
[0]->[2]->[6]
[0]->[2]->[77]
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. MVC FileDownLoad

    public ActionResult MatDownload() { string ShopId = Session["ShopId"].ToString(); var self ...

  2. optimize table tablename

    optimize 优化表OPTIMIZE 命令支持的引擎MyIsam, InnoDB, ARCHVE当对表有大量的增删改操作时,需要用optimize对表进行优化,可以减少空间与提高I/O性能,命令o ...

  3. Python Twisted系列教程16:Twisted 进程守护

    作者:dave@http://krondo.com/twisted-daemonologie/  译者: Cheng Luo 你可以从”第一部分 Twist理论基础“开始阅读:也可以从”Twisted ...

  4. oracle 函数中,一定要注意出现空记录和多条记录的处理方法

    今天折腾了3个小时,为一个以前不知道的oracle函数机制: 在sql查询中,如果一个查询未能获取记录,oracle不会报错 如select aa from bb where 1=2; 但在oracl ...

  5. 第一章 走进Java(待续)

    ·········

  6. Python时间日期函数讲解

    所有日期.时间的api都在datetime模块内. 1. 日期输出格式化 datetime => string import datetime now = datetime.datetime.n ...

  7. Word2Vec之Skip-Gram模型

    理解 Word2Vec 之 Skip-Gram 模型 模型 Word2Vec模型中,主要有Skip-Gram和CBOW两种模型,从直观上理解,Skip-Gram是给定input word来预测上下文. ...

  8. C++中的explicit关键字 - 抑制隐式转换(转)

    在C++程序中很少有人去使用 explicit 关键字,不可否认,在平时的实践中确实很少能用的上.再说C++的功能强大,往往一个问题可以利用好几种C++特性去解决.但稍微留心一下就会发现现有的MFC库 ...

  9. Ceph基本情况介绍

    Ceph基本情况的介绍 Ceph是一个分布式存储软件. 它支持用3种方式存储数据,分别是:对象存储.块设备存储.分布式文件系统存储. Ceph最初的目标是做一个分布式文件系统,直到现在这个目标也不能算 ...

  10. Bootstrap 学习资料

    1.Bootstrap中文文档 2.Bootstrap3.1.1 DEMO 3.Bootstrap教程 4.Sco.js--Bootstrap javascript组件的增强版 如果,您认为阅读这篇博 ...