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一点特殊用法
May 28 Javascript
JS弹出对话框返回值代码(asp.net后台)
Dec 28 Javascript
Node.js中对通用模块的封装方法
Jun 06 Javascript
跟我学习javascript的全局变量
Nov 16 Javascript
javascript闭包(Closure)用法实例简析
Nov 30 Javascript
AngularJs篇:使用AngularJs打造一个简易权限系统的实现代码
Dec 26 Javascript
微信小程序 登陆流程详细介绍
Jan 17 Javascript
vue获取元素宽、高、距离左边距离,右,上距离等还有XY坐标轴的方法
Sep 05 Javascript
vue自定义全局共用函数详解
Sep 18 Javascript
node.js处理前端提交的GET请求
Aug 30 Javascript
解决layui的radio属性或别的属性没显示出来的问题
Sep 26 Javascript
vue进入页面时不在顶部,检测滚动返回顶部按钮问题及解决方法
Oct 30 Javascript
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
也谈 PHP 和 MYSQL
2006/10/09 PHP
常见php数据文件缓存类汇总
2014/12/05 PHP
php实现的表单验证类完整示例
2019/08/13 PHP
YII2框架中ActiveDataProvider与GridView的配合使用操作示例
2020/03/18 PHP
Javascript 面向对象之重载
2010/05/04 Javascript
jquery.validate使用攻略 第五步 正则验证
2010/07/01 Javascript
jQuery实现的简单分页示例
2016/06/01 Javascript
js输出数据精确到小数点后n位代码
2016/07/02 Javascript
让html元素随浏览器的大小自适应垂直居中的实现方法
2016/10/12 Javascript
Angular.JS学习之依赖注入$injector详析
2016/10/20 Javascript
ES6概念 Symbol.keyFor()方法
2016/12/25 Javascript
JavaScript字符集编码与解码详谈
2017/02/02 Javascript
JS实现经典的中国地区三级联动下拉菜单功能实例【测试可用】
2017/06/06 Javascript
JS实现的找零张数最小问题示例
2017/11/28 Javascript
关于vue v-for 循环问题(一行显示四个,每一行的最右边那个计算属性)
2018/09/04 Javascript
vue-父子组件和ref实例详解
2019/11/10 Javascript
js实现批量删除功能
2020/08/27 Javascript
ant design vue嵌套表格及表格内部编辑的用法说明
2020/10/28 Javascript
[02:43]2018DOTA2亚洲邀请赛主赛事首日TOP5
2018/04/04 DOTA
Python RuntimeError: thread.__init__() not called解决方法
2015/04/28 Python
Python连接phoenix的方法示例
2017/09/29 Python
Python SQLite3简介
2018/02/22 Python
Python遍历文件夹 处理json文件的方法
2019/01/22 Python
python树的同构学习笔记
2019/09/14 Python
numpy.array 操作使用简单总结
2019/11/08 Python
css3 media 响应式布局的简单实例
2016/08/03 HTML / CSS
什么是lambda函数
2013/09/17 面试题
大学毕业生通用求职信
2013/09/28 职场文书
护理专业个人求职简历的自我评价
2013/10/13 职场文书
财务部岗位职责
2013/11/19 职场文书
拾金不昧表扬信范文
2014/01/11 职场文书
乡下人家教学反思
2014/02/01 职场文书
外贸员简历中的自我评价
2014/03/04 职场文书
餐馆开业致辞
2015/08/01 职场文书
详解CSS不定宽溢出文本适配滚动
2021/05/24 HTML / CSS
基于Redis6.2.6版本部署Redis Cluster集群的问题
2022/04/01 Redis