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学习笔记(五)正则表达式
Apr 08 Javascript
基于jquery的9行js轻松实现tab控件示例
Oct 12 Javascript
jquery实现当滑动到一定位置时固定效果
Jun 17 Javascript
javascript折半查找详解
Jan 26 Javascript
AngularJS中一般函数参数传递用法分析
Nov 22 Javascript
Vue方法与事件处理器详解
Dec 01 Javascript
vue.js指令v-model实现方法
Dec 05 Javascript
jQuery插件FusionCharts绘制2D柱状图和折线图的组合图效果示例【附demo源码】
Apr 10 jQuery
微信小程序图片选择区域裁剪实现方法
Dec 02 Javascript
React Component存在的几种形式详解
Nov 06 Javascript
jQuery设置下拉框显示与隐藏效果的方法分析
Sep 15 jQuery
javascript实现倒计时提示框
Mar 02 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 define()函数以及defined()函数的用法详解
2013/06/05 PHP
解析mysql left( right ) join使用on与where筛选的差异
2013/06/18 PHP
PHP利用Socket获取网站的SSL证书与公钥
2017/06/18 PHP
php大小写转换函数(strtolower、strtoupper)用法介绍
2017/11/17 PHP
PHP使用反向Ajax技术实现在线客服系统详解
2019/07/01 PHP
Mootools 1.2教程(3) 数组使用简介
2009/09/14 Javascript
JavaScript 面向对象的之私有成员和公开成员
2010/05/04 Javascript
JS操作Cookie写入和读取实例代码
2013/10/20 Javascript
详解基于Bootstrap扁平化的后台框架Ace
2015/11/27 Javascript
Bootstrap与KnockoutJs相结合实现分页效果实例详解
2016/05/03 Javascript
详解weex默认webpack.config.js改造
2018/01/08 Javascript
vue watch深度监听对象实现数据联动效果
2018/08/16 Javascript
jQuery实现的自定义轮播图功能详解
2018/12/28 jQuery
微信小程序图片左右摆动效果详解
2019/07/13 Javascript
在layui中使用form表单监听ajax异步验证注册的实例
2019/09/03 Javascript
python发送邮件接收邮件示例分享
2014/01/21 Python
Python编程实现蚁群算法详解
2017/11/13 Python
Python自然语言处理之词干,词形与最大匹配算法代码详解
2017/11/16 Python
Python中顺序表的实现简单代码分享
2018/01/09 Python
python删除不需要的python文件方法
2018/04/24 Python
pytorch + visdom CNN处理自建图片数据集的方法
2018/06/04 Python
Django框架的使用教程路由请求响应的方法
2018/07/03 Python
解决pandas.DataFrame.fillna 填充Nan失败的问题
2018/11/06 Python
pandas 选取行和列数据的方法详解
2019/08/08 Python
Sentry错误日志监控使用方法解析
2020/11/12 Python
Giglio英国站:意大利奢侈品购物网
2018/03/06 全球购物
钳工实习自我鉴定
2013/09/19 职场文书
工程专业求职自荐书范文
2014/02/18 职场文书
工伤事故赔偿协议书
2014/04/15 职场文书
写得不错的求职信范文
2014/07/11 职场文书
高中生思想道德自我评价
2015/03/09 职场文书
税务会计岗位职责
2015/04/02 职场文书
大学学生会主席竞选稿怎么写?
2019/08/19 职场文书
详解PyTorch模型保存与加载
2022/04/28 Python
Nginx跨域问题解析与解决
2022/08/05 Servers
Redis实战之Lettuce的使用技巧详解
2022/12/24 Redis