JAVA单向链表实现

单向链表

链表和数组一样是一种最常用的线性数据结构,两者各有优缺点。数组我们知道是在内存上的一块连续的空间构成,所以其元素访问可以通过下标进行,随机访问速度很快,但数组也有其缺点,由于数组的内存是一次性申请的,就像基本数据类型一样,一次性申请所需的空间,在数据量变动很大的时候就容易导致预先申请的内存不够或内存浪费。在者就是在存的是有序数列时进行数据插入会比较麻烦,所以链表就是为了弥补数组的不足的一种数据结构。相反的,链表对于变动很大的数据有很大的适应性,而且其对于数据插入和删除很方便。而链表的缺点就是对于内存的浪费,链表除了存储需要的数据还要存储额外的指针。链表的节点示意图如下:

看到指针你可能会想:“我们这不是java语言吗?没有指针啊!”,没错!在我对java了解不是很深的时候我也这么想,但是我要说的是java虽然不允许程序员像c/c++那样使用指针,但java语言本身的实现还是离不开指针的(变量名其实就是指向jvm中一块内存的指针,我就不详述)。请看以下节点的代码:

//节点数据结构    private class Node{  private Object data=null;//数据域  private Node next=null;//下一个节点  private Node(Object data) {   this.data=data;  } }

这里的节点class我是写成inner class的形式,后面有完整代码。还有一点就是这里object类型,这里也可以使用泛型

//链表数据结构public class SingleLinkList { int size=0;//链表长度,可有可无,有的话很容易实现很多链表的特殊操作 Node head=null;//头节点 public SingleLinkList() {  this.size=0;this.head=null; }}

有了这两个类,然后再来实现链表的一些基本操作:插入头节点,删除头节点,删除指定节点,查找指定节点。直接看完整源代码。

package singleLinkList;​public class SingleLinkList {​ int size=0;//链表长度 Node head=null;

 public SingleLinkList() {  this.size=0;this.head=null; }

 //节点数据结构 private class Node{  private Object data=null;//数据域  private Node next=null;//下一个节点  private Node(Object data) {   this.data=data;  } }

 //表头添加元素 public Object addHead(Object data) {  Node newHead=new Node(data);  if(size==0) {   this.head=newHead;  }  else {   newHead.next=this.head;   this.head=newHead;  }  size++;  return data; }

 //删除表头元素 public Object deleteHead() {  if(size>0) {  Node node=this.head;  this.head=this.head.next;  size--;  }  return null; }

 //查找指定元素 public Node findData(Object data) {  if(size==0)return null;  Node cur=this.head;

转载于:https://www.cnblogs.com/Davidhwj/p/10433387.html

JAVA单向链表实现相关推荐

  1. java 单向链表 双向链表_java 单向链表与双向链表的实现

    链表 单向链表 单向链表概念 链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的. 这是一种物理结构,不是树那样的逻辑结构.链表和顺序表两种物理结构, ...

  2. java单向链表详解

    1.概述 单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始:链表是使用指针进行构造的列表:又称为结点列表,因为链表是由一个个结点组装起来的:其中每个 ...

  3. Java 单向链表和单向循环链表的代码实现

    这个链表,以前上学的时候,学c语言,还是数据结构的时候,学过.也许也实现过吧.下面我就简单记录下这个链表的实现. 单向链表跟单向循环链表的差别就是:单向链表是有结束位的,指向null的时候,就到结尾了 ...

  4. Java 单向链表模拟

    链表是有序的列表 链表是以节点的方式来存储的,各个节点不一定是连续存储的 分为带头节点的链表和没有头节点的链表 头节点不存放具体数据 单向链表: 其中每一个节点包含一个存储数据的data,一个指向下一 ...

  5. Java单向链表反转

    要求 给出单链表的头节点 head ,要求反转链表,并返回反转后的链表. 实现原理 单向链表反转就是将链表的指针方向改变.由于单链表没有指向前一个结点的指针,所以,我们定义一个指向前一个节点的指针pr ...

  6. java单向链表中的头插法与尾插法

    单链表属于数据结构中的一种基本结构,是一种线性结构,在此使用Java对其中的头插法以及尾插法进行解释.数据结构 首先定义好链表中的节点类: 其中,data表明节点所存放的数据,next表明指向下一节点 ...

  7. Java单向链表操作详解

    /* 先定义一个Node类用来存储节点的值域和指针域 * 即当前节点中的值和后面节点的方法 * 在C中就是相当与定义一个结构体类型一个数据域和指针域的方法 */ class LNode{//这个写法已 ...

  8. java单向链表按顺序插入节点

    实现步骤: 1.首先找到新添加的节点的位置,是通过辅助变量(指针),通过遍历来实现. 2.新的节点 next = temp.next. 3.将temp.next = 新的节点. package com ...

  9. JAVA单向/双向链表的实现

    一.JAVA单向链表的操作(增加节点.查找节点.删除节点) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 2 ...

最新文章

  1. 接口重复提交解决方案
  2. Spider_douyin
  3. 开发 Sublime Text 3 插件简易教程
  4. 最小生成树、最短路径树
  5. 技术人员,该如何向业务和产品“砍需求”?
  6. 信息学奥赛一本通 1958:【12NOIP普及组】寻宝 | OpenJudge NOI 1.12 06 | 洛谷 P1076 [NOIP2012 普及组] 寻宝
  7. webhooks_在本地开发时如何测试Webhooks
  8. Struts2和Spring3 MVC的区别说明
  9. oracle analyze 全部表,Oracle analyze table
  10. 使用CSS在文字前面加上图标。
  11. C++ 命名空间(namespace)
  12. 易优插件采集伪原创发布插件免费
  13. 华为路由器配置备忘录
  14. 蓝桥杯每日一练——小明跳房子 python
  15. WIN10任务栏卡死,鼠标一直转圈(亲测有效)
  16. 沃丰科技:AI赋能泛CRM,为新企服扬风鼓帆
  17. 【暗月内网靶场】项目六(简单的内网靶场)
  18. 计算机外存是ram硬盘还是,都是存储器,但RAM、ROM、闪存、硬盘怎么分?
  19. NLP-基础任务-中文分词算法(3)-基于字:基于序列标注的分词算法【BiLSTM+CRF】
  20. sqlserver日期推算(年,季度,月,星期推算)

热门文章

  1. linux 单例模式改密码,Java 利用枚举实现单例模式
  2. python安全攻防---爬虫基础---get和post提交数据
  3. C和汇编-----for循环
  4. 【桶】220.存在重复元素 III 【LeetCode】
  5. 快速pow和sqrt的小技巧 hdu4282
  6. 文字常量区和栈区考点
  7. Linux系统编程----15(线程与进程函数之间的对比,线程属性及其函数,线程属性控制流程,线程使用注意事项,线程库)
  8. Linux下的TCP/IP编程----IO复用及IO复用服务端
  9. linux网络编程之posix 线程(三):posix 匿名信号量与互斥锁 示例生产者--消费者问题
  10. linux中标准I/O 文件I/O 及库