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 相关文章推荐
js 获取class的元素的方法 以及创建方法getElementsByClassName
Mar 11 Javascript
JS自动适应的图片弹窗实例
Jun 29 Javascript
js浮点数保留两位小数点示例代码(四舍五入)
Dec 26 Javascript
jQuery中slideUp()方法用法分析
Dec 24 Javascript
js实现楼层效果的简单实例
Jul 15 Javascript
JSP防止网页刷新重复提交数据的几种方法
Nov 19 Javascript
jQuery实现动态添加tr到table的方法
Dec 26 Javascript
jQuery+pjax简单示例汇总
Apr 21 jQuery
微信小程序实现topBar底部选择栏效果
Jul 20 Javascript
Vue实现调节窗口大小时触发事件动态调节更新组件尺寸的方法
Sep 15 Javascript
使用Angular 6创建各种动画效果的方法
Oct 10 Javascript
JS实现简单省市二级联动
Nov 27 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防注
2007/01/15 PHP
PHP单例模式详细介绍
2015/07/01 PHP
WordPress中访客登陆实现邮件提醒的PHP脚本实例分享
2015/12/14 PHP
jquery animate图片模向滑动示例代码
2011/01/26 Javascript
改善用户体验的五款jQuery插件分享
2011/05/22 Javascript
模拟多级复选框效果的jquery代码
2013/08/13 Javascript
浅析JavaScript中的CSS属性及命名规范
2013/11/28 Javascript
JavaScript数据类型学习笔记
2016/01/25 Javascript
Vue.js实现简单ToDoList 前期准备(一)
2016/12/01 Javascript
AngularJS入门示例之Hello World详解
2017/01/04 Javascript
Nodejs中Express 常用中间件 body-parser 实现解析
2017/05/22 NodeJs
你有必要知道的10个JavaScript难点
2017/07/25 Javascript
JS原生数据双向绑定实现代码
2017/08/14 Javascript
angularjs 页面自适应高度的方法
2018/01/17 Javascript
详解vue使用vue-layer-mobile组件实现toast,loading效果
2018/08/31 Javascript
浅谈vue中document.getElementById()拿到的是原值的问题
2020/07/26 Javascript
浅谈MySQL中的触发器
2015/05/05 Python
python数据结构之图深度优先和广度优先实例详解
2015/07/08 Python
利用Anaconda完美解决Python 2与python 3的共存问题
2017/05/25 Python
Python实现随机漫步功能
2018/07/09 Python
python 中文件输入输出及os模块对文件系统的操作方法
2018/08/27 Python
python使用gdal对shp读取,新建和更新的实例
2020/03/10 Python
印度尼西亚最大的电商平台:Tokopedia(印尼版淘宝)
2017/12/02 全球购物
法国在线药房:Shop Pharmacie
2019/11/26 全球购物
2014政务公开实施方案
2014/02/19 职场文书
技校毕业生个人学习的自我评价
2014/02/21 职场文书
高中军训感言400字
2014/02/24 职场文书
《最后的姿势》教学反思
2014/02/27 职场文书
《水上飞机》教学反思
2014/04/10 职场文书
安全生产工作汇报材料
2014/10/28 职场文书
2014年图书管理员工作总结
2014/12/01 职场文书
出国留学单位推荐信
2015/03/26 职场文书
JavaScript实现淘宝商品图切换效果
2021/04/29 Javascript
MySQL实现配置主从复制项目实践
2022/03/31 MySQL
Win10加载疑难解答时出错发生意外错误的解决方法
2022/07/07 数码科技
MySQL中LAG()函数和LEAD()函数的使用
2022/08/14 MySQL