使用java实现单链表----(java中的引用就是指针)
- //一直以为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中的引用就是指针)的更多相关文章
- Java实现单链表的各种操作
Java实现单链表的各种操作 主要内容:1.单链表的基本操作 2.删除重复数据 3.找到倒数第k个元素 4.实现链表的反转 5.从尾到头输出链表 6.找到中间节点 7.检测链表是否有环 8.在 ...
- 数据结构——Java实现单链表
一.分析 单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素.链表中的数据是以结点来表示的,每个结点由元素和指针构成.在Java中,我们可以将单链表定义成一个类,单链表的基 ...
- Java实现单链表反转操作
单链表是一种常见的数据结构,由一个个节点通过指针方式连接而成,每个节点由两部分组成:一是数据域,用于存储节点数据.二是指针域,用于存储下一个节点的地址.在Java中定义如下: public class ...
- JAVA数据结构——单链表
链表:一. 顺序存储结构虽然是一种很有用的存储结构,但是他有如下几点局限性:1. 因为创造线性表的时候已经固定了空间,所以当需要扩充空间时,就需要重新创建一个地址连续的更大的存储空间.并把原有的数据元 ...
- 使用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 ...
- java实现单链表的增删功能
JAVA 实现单链表的增删功能 package linked; class LinkedTable{ } public class LinkedTableTest { public static vo ...
- 数据结构——单链表java简易实现
巩固数据结构 单链表java实现 单链表除了表尾 每个几点都有一个后继 结点有数据和后继指针组成 通过构建表头和表尾(尾部追加需要)两个特殊几点 实现单链表的一些操作,代码如下 package co ...
- 链表习题(1)-设计一个递归算法,删除不带头结点的单链表L中所有值为x的结点
/*设计一个递归算法,删除不带头结点的单链表L中所有值为x的结点*/ /* 算法思想:设f(L,x)的功能是删除以L为首结点指针的单链表中所有值等于x的结点, 则显然有f(L->next,x)的 ...
- [二叉树算法]让树所有叶子节点连成一个单链表,让rchild作为 next指针
//让树所有叶子节点连成一个单链表,让rchild作为 next指针 LNode *head=null,*pre=null;//全局变量 LNode *InOrder(BTNode *T){ if(T ...
- c++中的引用与指针的区别
http://blog.csdn.net/lyd_253261362/article/details/4323691 c++中的引用与指针的区别 ★ 相同点: 1. 都是地址的概念: 指针指向一块内存 ...
随机推荐
- 【openCV学习笔记】【2】读取并播放一段视频
#include <iostream> #include <opencv/highgui.h> int main(int argc, char** argv){ cvNamed ...
- (转)c#实现开机自启动
RegistryKey key = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersio ...
- Effective java笔记2--创建于销毁对象
一.创建对象的两种方式 1.提供公有的构造器. 2.提供一个返回类实例的静态方法. 二.使用静态方法创建对象 优势: 1.静态工厂方法的一个好处是,与构造函数不同,静态工厂方法具有名字.产生的客户端代 ...
- thinkphp使用自定义类方法
1.通过Model调用 <?php /** * 积分模型 api接口 */ class ApiModel{ private $url = 'http://js.yunlutong.com/Cus ...
- kali 软件源 包含virtualbox所需头文件
# deb cdrom:[Debian GNU/Linux 7.0 _Kali_ - Official Snapshot i386 LIVE/INSTALL Binary 20130905-08:50 ...
- Oracle redo与undo
Undo and redo Oracle最重要的两部分数据,undo 与redo,redo(重做信息)是oracle在线(或归档)重做日志文件中记录的信息,可以利用redo重放事务信息,undo(撤销 ...
- XHTML1.0版本你知道么,跟html5版本有什么区别
XHTML 1.0 是 XML 风格的 HTML 4.01. XHTML 1.1 主要是初步进行了模块化. HTML5 是下一代 HTML,取代 HTML 4.01. W3C 原本确实计划用 XHTM ...
- python's seventh day for me set
数据类型的补充: 对于元祖: 如果只有一个元素,并且没有逗号,此元素是什么数据类型,该表达式就是什么数据类型. tu = ('顾清秋') tul = ('顾清秋',) print(type(tu)) ...
- win7系统程序未响应怎么办
问题描述:出现“程序未响应...”而后系统程序就没有反应了. 解决方案:1.运行→输入“regedit”→hkey_current_usser/control panel/desktop/window ...
- oracle10g Error in invoking target 'install' of makefile
oracle10g series error error in invoking target 'install' of makefile /u01/app/oracle/oracle/product ...