java实现单链表增删改查的实例代码详解


Posted in Javascript onAugust 30, 2019
package 数据结构算法.链表;

/*
 *定义节点
 * 链表由节点构成
 */
public class Node<E> {
  private E e;  //数据data
  private Node<E> next; //指向下一个节点

  public Node() {

  }

  public Node(E e) {
    this.e = e;
  }

  public Node<E> getNext() {
    return next;
  }

  public void setNext(Node<E> next) {
    this.next = next;
  }

  public E getE() {
    return e;
  }

  public void setE(E e) {
    this.e = e;
  }
}
package 数据结构算法.链表;

/*
 * 定义实现类MyLinkedList
 * 实现链表的基本功能:增删改查
 */
public class MyLinkedList<E> {
  //声明头节点尾节点
  private Node<E> head;
  private Node<E> last;
  //链表的大小
  private int size;
  private int modcount; //计算被修改的次数

  public MyLinkedList() {
    head = new Node<E>();//实例化头结点
    last = head;
  }

  /*
   *返回单链表中存储的元素总数
   */
  public int size() {
    return size;
  }

  /*
   *获取指定索引位置的节点对象
   */
  public Node<E> get(int index) {
    if (index < 0 || index > size - 1)
      return null;
    Node<E> node = head.getNext();//将头结点的下一个节点赋给Node
    for (int i = 0; i < index; i++) {
      node = node.getNext();//获取node的下一个节点
    }
    return node;
  }

  /*
   *获取指定索引位置的数据
   */
  public E getValue(int index) {
    if (index < 0 || index > size - 1)
      return null;
    Node<E> node = get(index);
    return node.getE();
  }

  /*
   *增加元素
   */
  public void add(E e) {
    Node<E> node = new Node<E>(e); //以e实例化一个节点
    last.setNext(node);//往尾节点后追加节点
    last = node;//该节点设为最后一个节点
    size++;
    modcount++;
  }

  /*
   *指定位置插入元素,返回插入的节点数据
   */
  public E add(int index, E e) {
    if (index < 0 || index > size - 1)
      return null;
    Node<E> node = new Node<E>(e); //实例化一个节点
    //找到插入的原节点
    Node<E> oldNode = get(index);
    if (index == 0) {//当索引为0时
      head.setNext(node);
    } else {
      //找到插入节点的上一个
      Node<E> bNode = get(index - 1);
      bNode.setNext(node);
    }
    node.setNext(oldNode);
    size++;
    modcount++;
    return oldNode.getE();
  }

  /*
   *删除指定的节点e,并返回删除节点的数据
   */
  public E delete(int index) {
    if (index < 0 || index > size - 1)
      return null;
    if (index == 0) {//当索引为1,令头结点的下一个节点为头结点
      Node<E> node = head.getNext();
      head.setNext(node.getNext());
    }
    //获取要删除节点的前一个节点
    Node<E> bNode = get(index - 1);
    //获取要删除的节点
    Node<E> Node = bNode.getNext();
    //获取要删除节点的下一个节点
    Node<E> nNode = Node.getNext();
    //删除该节点
    bNode.setNext(nNode);
    //清除Node的下一个节点
    Node.setNext(null);
    size--;
    modcount++;
    return Node.getE();//返回节点中的数据域
  }

  /*
   *修改指定位置的数据域并返回修改后的数据
   */
  public E set(int index, E e) {
    if (index < 0 || index > size - 1)
      return null;
    //获取指定位置的原节点
    Node<E> node = get(index);
    node.setE(e);
    modcount++;
    return node.getE();
  }
}
package 数据结构算法.链表;

/*
 *定义测试类
 */
public class MyLinkedListTest {
  public static void main(String[] args) {
    MyLinkedList<String> list = new MyLinkedList<>();

    //测试add
    list.add("one");
    list.add("two");
    list.add("three");
    list.add("four");
    list.add(0,"newone");
    list.add(1,"newtwo");
    for (int i = 0; i < list.size(); i++) {
      System.out.print(list.getValue(i)+" ");
    }

    //测试set
    System.out.println();
    list.set(0, "111");
    list.set(1, "222");
    System.out.println(list.getValue(0) + "  " + list.getValue(1));

    //测试delete
    System.out.println();
    list.delete(1);
    for (int i = 0; i < list.size(); i++) {
      System.out.print(list.getValue(i)+" ");
    }
  }
}

运行结果如下:

java实现单链表增删改查的实例代码详解

 以上就是全部知识点内容,感谢大家对三水点靠木的支持。

Javascript 相关文章推荐
Javascript图像处理—为矩阵添加常用方法
Dec 27 Javascript
Jquery创建层显示标题和内容且随鼠标移动而移动
Jan 26 Javascript
基于jQuery实现在线选座之高铁版
Aug 24 Javascript
JS模拟简易滚动条效果代码(附demo源码)
Apr 05 Javascript
JavaScript使用delete删除数组元素用法示例【数组长度不变】
Jan 17 Javascript
浅析vue数据绑定
Jan 17 Javascript
Vue中添加过渡效果的方法
Mar 16 Javascript
jQuery中table数据的值拷贝和拆分
Mar 19 Javascript
JS移动端/H5同时选择多张图片上传并使用canvas压缩图片
Jun 20 Javascript
JS实现的类似微信聊天效果示例
Jan 29 Javascript
Vue Render函数原理及代码实例解析
Jul 30 Javascript
vue实现两个区域滚动条同步滚动
Dec 13 Vue.js
vuex vue简单使用知识点总结
Aug 29 #Javascript
js中的this的指向问题详解
Aug 29 #Javascript
Node4-5静态资源服务器实战以及优化压缩文件实例内容
Aug 29 #Javascript
webpack + vue 打包生成公共配置文件(域名) 方便动态修改
Aug 29 #Javascript
微信小程序实现购物车代码实例详解
Aug 29 #Javascript
vue图片加载失败时用默认图片替换的方法
Aug 29 #Javascript
vue 框架下自定义滚动条(easyscroll)实现方法
Aug 29 #Javascript
You might like
一个捕获函数输出的函数
2007/02/14 PHP
php 字符转义 注意事项
2009/05/27 PHP
ThinkPHP实例化模型的四种方法概述
2014/08/22 PHP
thinkphp常见路径用法分析
2014/12/02 PHP
YII中Ueditor富文本编辑器文件和图片上传的配置图文教程
2017/03/15 PHP
PHP实现的简单异常处理类示例
2017/05/04 PHP
php面向对象程序设计中self与static的区别分析
2019/05/21 PHP
Laravel Eloquent ORM 多条件查询的例子
2019/10/10 PHP
文本加密解密
2006/06/23 Javascript
仅用[]()+!等符号就足以实现几乎任意Javascript代码
2010/03/01 Javascript
九种js弹出对话框的方法总结
2013/03/12 Javascript
javascript实现图片自动和可控的轮播切换特效
2015/04/13 Javascript
不同js异步函数同步的实现方法
2016/05/28 Javascript
JavaScript事件学习小结(五)js中事件类型之鼠标事件
2016/06/09 Javascript
Vue单文件组件基础模板小结
2017/08/10 Javascript
angularjs实现table增加tr的方法
2018/02/27 Javascript
Vue中使用vue-i18插件实现多语言切换功能
2018/04/25 Javascript
JavaScript循环遍历你会用哪些之小结篇
2018/09/28 Javascript
vue Tab切换以及缓存页面处理的几种方式
2019/11/05 Javascript
基于Vue CSR的微前端实现方案实践
2020/05/27 Javascript
微信小程序 接入腾讯地图的两种写法
2021/01/12 Javascript
Python时间模块datetime、time、calendar的使用方法
2016/01/13 Python
简单谈谈Python流程控制语句
2016/12/04 Python
对python3 中方法各种参数和返回值详解
2018/12/15 Python
如何使用pandas读取txt文件中指定的列(有无标题)
2020/03/05 Python
Python用SSH连接到网络设备
2021/02/18 Python
css3中flex布局宽度不生效的解决
2020/12/09 HTML / CSS
2014年银行客户经理工作总结
2014/11/12 职场文书
中班下学期个人工作总结
2015/02/12 职场文书
自主招生自荐信怎么写
2015/03/24 职场文书
公司禁烟通知
2015/04/23 职场文书
2015年司机年终工作总结
2015/05/14 职场文书
2015年董事长秘书工作总结
2015/07/23 职场文书
Android 中的类文件和类加载器详情
2022/06/05 Java/Android
Vue 打包后相对路径的引用问题
2022/06/05 Vue.js
详解Flutter自定义应用程序内键盘的实现方法
2022/06/14 Java/Android