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 相关文章推荐
会自动逐行上升的文本框
Jun 30 Javascript
jquery的ajax请求全面了解
Mar 20 Javascript
文本框(input)获取焦点(onfocus)时样式改变的示例代码
Jan 10 Javascript
javascript 原型链维护和继承详解
Nov 26 Javascript
jQuery选择器源码解读(二):select方法
Mar 31 Javascript
使用jQuery制作Web页面遮罩层插件的实例教程
May 26 Javascript
jQuery Ajax传值到Servlet出现乱码问题的解决方法
Oct 09 Javascript
微信小程序开发之Tabbar实例详解
Jan 09 Javascript
bootstrap模态框嵌套、tabindex属性、去除阴影的示例代码
Oct 17 Javascript
详解javascript 变量提升(Hoisting)
Mar 12 Javascript
jquery实现两个div中的元素相互拖动的方法分析
Apr 05 jQuery
浅谈vue使用axios的回调函数中this不指向vue实例,为undefined
Sep 21 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
CodeIgniter上传图片成功的全部过程分享
2013/08/12 PHP
php天翼开放平台短信发送接口实现方法
2014/12/22 PHP
非常有用的9个PHP代码片段
2016/04/06 PHP
PHP实现上传多图即时显示与即时删除的方法
2017/05/09 PHP
始终在屏幕中间显示Div的代码(css+js)
2011/03/10 Javascript
windows系统下简单nodejs安装及环境配置
2013/01/08 NodeJs
jQuery Animation实现CSS3动画示例介绍
2013/08/14 Javascript
基于jquery自定义的漂亮单选按钮RadioButton
2013/11/19 Javascript
setTimeout内不支持jquery的选择器的解决方案
2015/04/28 Javascript
javascript实现10个球随机运动、碰撞实例详解
2015/07/08 Javascript
javascript判断网页是关闭还是刷新
2015/09/12 Javascript
三种带箭头提示框总结实例
2016/06/14 Javascript
angularjs封装bootstrap时间插件datetimepicker
2016/06/20 Javascript
js获取时间函数及扩展函数的方法
2016/10/30 Javascript
JavaScript ES6中CLASS的使用详解
2016/11/22 Javascript
js 获取图像缩放后的实际宽高,位置等信息
2017/03/07 Javascript
Vue 框架之键盘事件、健值修饰符、双向数据绑定
2018/11/14 Javascript
微信小程序实现多选删除列表数据功能示例
2019/01/15 Javascript
基于JavaScript实现大文件上传后端代码实例
2020/08/18 Javascript
微信小程序实现拼图小游戏
2020/10/22 Javascript
详解python 拆包可迭代数据如tuple, list
2017/12/29 Python
Python3多线程基础知识点
2019/02/19 Python
python使用opencv对图像mask处理的方法
2019/07/05 Python
Python面向对象程序设计之类和对象、实例变量、类变量用法分析
2020/03/23 Python
Python爬虫获取op.gg英雄联盟英雄对位胜率的源码
2021/01/29 Python
html5/css3响应式页面开发总结
2018/10/16 HTML / CSS
html5中canvas图表实现柱状图的示例
2017/11/13 HTML / CSS
iRobot官网:改变生活的家用机器人品牌
2016/09/20 全球购物
Linux文件系统类型
2012/09/16 面试题
如何做好总经理助理
2013/11/12 职场文书
体育教育个人自荐信范文
2013/12/01 职场文书
房产委托公证书
2014/04/08 职场文书
汽车广告策划方案
2014/05/31 职场文书
见义勇为事迹材料
2014/12/24 职场文书
幼儿园老师个人总结
2015/02/28 职场文书
python基础学习之递归函数知识总结
2021/05/26 Python