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代码
May 27 Javascript
由浅入深讲解Javascript继承机制与simple-inheritance源码分析
Dec 13 Javascript
JS中frameset框架弹出层实例代码
Apr 01 Javascript
js两种拼接字符串的简单方法(必看)
Sep 02 Javascript
jquery中绑定事件的异同
Feb 28 Javascript
Vue中的v-cloak使用解读
Mar 27 Javascript
关于javascript获取内联样式与嵌入式样式的实例
Jun 01 Javascript
基于js 各种排序方法和sort方法的区别(详解)
Jan 03 Javascript
webpack4 升级迁移的实现
Sep 12 Javascript
Vue 重置组件到初始状态的方法示例
Oct 10 Javascript
JavaScript实现的滚动公告特效【基于jQuery】
Jul 10 jQuery
JavaScript实现瀑布流布局的3种方式
Dec 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下MAIL的另一解决方案
2006/10/09 PHP
隐藏X-Space个人空间下方版权方法隐藏X-Space个人空间标题隐藏X-Space个人空间管理版权方法
2007/02/22 PHP
php处理restful请求的路由类分享
2014/02/27 PHP
PHP中使用glob函数实现一句话删除某个目录下的所有文件
2014/07/22 PHP
php中fsockopen用法实例
2015/01/05 PHP
php+ajax无刷新分页实例详解
2015/12/07 PHP
Json_encode防止汉字转义成unicode的方法
2016/02/25 PHP
Array.prototype.slice 使用扩展
2010/06/09 Javascript
解析瀑布流布局:JS+绝对定位的实现
2013/05/08 Javascript
JQuery实现table行折叠效果以JSON做数据源
2014/05/26 Javascript
实例分析js和C#中使用正则表达式匹配a标签
2014/11/26 Javascript
jquery 插件实现多行文本框[textarea]自动高度
2015/03/04 Javascript
jQuery实现动态表单验证时文本框抖动效果完整实例
2015/08/21 Javascript
JS控制层作圆周运动的方法
2016/06/20 Javascript
详解jQuery的Cookie插件
2016/11/23 Javascript
js+html5实现半透明遮罩层弹框效果
2020/08/24 Javascript
Javascript网页抢红包外挂实现分享
2018/01/11 Javascript
JS实现的定时器展示简单秒表、页面弹框及跳转操作完整示例
2020/01/26 Javascript
微信小程序实现菜单左右联动
2020/05/19 Javascript
python3实现UDP协议的服务器和客户端
2017/06/14 Python
Python中django学习心得
2017/12/06 Python
python Opencv将图片转为字符画
2021/02/19 Python
Django实现支付宝付款和微信支付的示例代码
2018/07/25 Python
Python时间序列处理之ARIMA模型的使用讲解
2019/04/02 Python
Python实现非正太分布的异常值检测方式
2019/12/09 Python
PyQt5多线程刷新界面防假死示例
2019/12/13 Python
诗狄娜化妆品官方网站:Stila Cosmetics
2016/12/21 全球购物
意大利男装网店:Vrients
2019/05/02 全球购物
Vector, ArrayList, HashTable, HashMap哪些是线程安全的,哪些不是
2015/10/12 面试题
商务英语专业求职信范文
2014/01/28 职场文书
《十六年前的回忆》教学反思
2014/02/14 职场文书
莫言诺贝尔获奖演讲稿
2014/05/21 职场文书
2014年十八届四中全会思想汇报范文
2014/10/17 职场文书
2014年乡镇纪委工作总结
2014/12/19 职场文书
生日赠语
2015/06/23 职场文书
windows11选中自动复制怎么开启? Win11自动复制所选内容的方法
2022/07/23 数码科技