//一直以为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. FTP for win7

    In Windows 7, you can share files on home network easily using Home Group but creating an FTP server ...

  2. POJ 2823 Sliding Window(单调队列入门题)

      Sliding Window Time Limit: 12000MS   Memory Limit: 65536K Total Submissions: 67218   Accepted: 190 ...

  3. phpmailer绑定邮箱

    1.配置 <?php return array ( 'email_host' => 'smtp.aliyun.com', 'email_port' => '25', 'email_u ...

  4. String to Integer (atoi) ???

    #define INT_MAX 2147483647 #define INT_MIN -2147483648 class Solution { public: int atoi(const char ...

  5. leetcode378

    public class Solution { public int KthSmallest(int[,] matrix, int k) { ); ); var list = new List< ...

  6. python的ftplib模块

    Python中的ftplib模块 Python中默认安装的ftplib模块定义了FTP类,其中函数有限,可用来实现简单的ftp客户端,用于上传或下载文件 FTP的工作流程及基本操作可参考协议RFC95 ...

  7. $().each和$.each()

    $().each 在dom处理上面用的较多.如果页面有多个input标签类型为checkbox,对于这时用$().each来处理多个checkbook,例如: $(“input[name=’ch’]” ...

  8. 【278】◀▶ Python 数学函数说明

    参考:Python 数学函数说明 目录: 一.Python 数学函数 二.Python 随机数函数 三.Python 三角函数 四.Python 数学常量 一.Python 数学函数   函数 返回值 ...

  9. quartz在web.xml的配置

    第一步:下载所需的Jar包 commons-beanutils.ja.commons-collections.jar.commons-logging.jar.commons-digester.jar. ...

  10. IDEA MAVEN 1.8无效的源发行版

    最近想将自己在IDEA上开发的MAVEN项目切换到JDK1.8版本上,结果IDEA报1.8无效的源发行版.下面说一下自己的解决方案: 1.pom文件 <build> <plugins ...