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 个人笔记(没有整理,很乱)
Jul 07 Javascript
JavaScript 事件记录使用说明
Oct 20 Javascript
jquery 事件冒泡的介绍以及如何阻止事件冒泡
Dec 25 Javascript
javascipt基础内容--需要注意的细节
Apr 10 Javascript
js实现倒计时时钟的示例代码
Dec 17 Javascript
js关于精确计算和数值格式化以及直接引js文件
Jan 28 Javascript
Javascript基础_标记文字的实现方法
Jun 14 Javascript
jquery插件格式实例分析
Jun 16 Javascript
Javascript中apply、call、bind的巧妙使用
Aug 18 Javascript
JS百度地图搜索悬浮窗功能
Jan 12 Javascript
详解React 16 中的异常处理
Jul 28 Javascript
Vue 嵌套路由使用总结(推荐)
Jan 13 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
第十节--抽象方法和抽象类
2006/11/16 PHP
php中使用addslashes函数报错问题的解决方法
2013/02/06 PHP
模仿JQuery.extend函数扩展自己对象的js代码
2009/12/09 Javascript
javascript parseInt与Number函数的区别
2010/01/21 Javascript
js验证输入是否为手机号码或电话号码示例
2013/12/30 Javascript
jquery toolbar与网页浮动工具条具体实现代码
2014/01/12 Javascript
jQuery的:parent选择器定义和用法
2014/07/01 Javascript
jQuery+css3实现Ajax点击后动态删除功能的方法
2015/08/10 Javascript
多个js毫秒倒计时同时进行效果
2016/01/05 Javascript
BootStrap+Mybatis框架下实现表单提交数据重复验证
2017/03/23 Javascript
Vue实现6位数密码效果
2018/08/18 Javascript
vue 修改 data 数据问题并实时显示的方法
2018/08/27 Javascript
浅谈VUE单页应用首屏加载速度优化方案
2018/08/28 Javascript
vue实现条件判断动态绑定样式的方法
2018/09/29 Javascript
vue.js实现会动的简历(包含底部导航功能,编辑功能)
2019/04/08 Javascript
JS几个常用的函数和对象定义与用法示例
2020/01/15 Javascript
js实现div色块碰撞
2020/01/16 Javascript
vue+render+jsx实现可编辑动态多级表头table的实例代码
2020/04/01 Javascript
解决vue+router路由跳转不起作用的一项原因
2020/07/19 Javascript
[01:06:26]全国守擂赛第二周 Team Coach vs DeMonsTer
2020/04/28 DOTA
python读写ini配置文件方法实例分析
2015/06/30 Python
浅析Python中signal包的使用
2015/11/13 Python
python数据类型_字符串常用操作(详解)
2017/05/30 Python
Python面向对象基础入门之编码细节与注意事项
2018/12/11 Python
PyTorch笔记之scatter()函数的使用
2020/02/12 Python
python requests.get带header
2020/05/05 Python
css3的transition属性详解
2014/12/15 HTML / CSS
美国快时尚彩妆品牌:Winky Lux(透明花瓣润唇膏)
2018/11/06 全球购物
高级工程师岗位职责
2013/12/15 职场文书
美丽家庭事迹材料
2014/05/03 职场文书
专科生就业求职信
2014/06/22 职场文书
民事起诉状范文
2015/05/19 职场文书
《别在吃苦的年纪选择安逸》读后感3篇
2019/11/30 职场文书
python函数指定默认值的实例讲解
2021/03/29 Python
Django cookie和session的应用场景及如何使用
2021/04/29 Python
Vue+TypeScript中处理computed方式
2022/04/02 Vue.js