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 OFFICE控件测试代码
Dec 08 Javascript
mailto的使用技巧分享
Dec 21 Javascript
JavaScript+html5 canvas实现图片破碎重组动画特效
Feb 22 Javascript
MUI 解决动态列表页图片懒加载再次加载不成功的bug问题
Apr 13 Javascript
详解axios在node.js中的post使用
Apr 27 Javascript
Vue学习笔记之表单输入控件绑定
Sep 05 Javascript
jQuery实现简单的回到顶部totop功能示例
Oct 16 jQuery
vue 添加vux的代码讲解
Nov 30 Javascript
Vue组件开发技巧总结
Mar 04 Javascript
JS常见构造模式实例对比分析
Aug 27 Javascript
JavaScript 类的封装操作示例详解
May 16 Javascript
vue-cli3项目打包后自动化部署到服务器的方法
Sep 16 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
中国收音机工业发展史
2021/03/02 无线电
Mac系统下使用brew搭建PHP(LNMP/LAMP)开发环境
2015/03/03 PHP
Smarty foreach控制循环次数的一些方法
2015/07/01 PHP
php自定义时间转换函数示例
2016/12/07 PHP
PHP基于堆栈实现的高级计算器功能示例
2017/09/15 PHP
详细对比php中类继承和接口继承
2018/10/11 PHP
Document 对象的常用方法
2009/07/31 Javascript
javascript 命名规则 变量命名规则
2010/02/25 Javascript
HTML5+setCutomValidity()函数验证表单实例分享
2015/04/24 Javascript
jQuery+Ajax+PHP弹出层异步登录效果(附源码下载)
2016/05/27 Javascript
js实现的简练高效拖拽功能示例
2016/12/21 Javascript
js实现3d悬浮效果
2017/02/16 Javascript
NodeJS自定义模块写法(详解)
2017/06/27 NodeJs
不得不知的ES6小技巧
2018/07/28 Javascript
NodeJS实现一个聊天室功能
2019/11/25 NodeJs
node.js +mongdb实现登录功能
2020/06/18 Javascript
JS常见错误(Error)及处理方案详解
2020/07/02 Javascript
手动实现vue2.0的双向数据绑定原理详解
2021/02/06 Vue.js
[47:06]DOTA2上海特级锦标赛主赛事日 - 4 败者组第五轮 MVP.Phx VS EG第一局
2016/03/05 DOTA
python基础教程之循环介绍
2014/08/29 Python
简单谈谈Python中的元祖(Tuple)和字典(Dict)
2017/04/21 Python
python中将zip压缩包转为gz.tar的方法
2018/10/18 Python
从0开始的Python学习014面向对象编程(推荐)
2019/04/02 Python
Python字典的概念及常见应用实例详解
2019/10/30 Python
使用wxpy实现自动发送微信消息功能
2020/02/28 Python
大学生预备党员自我评价分享
2013/11/16 职场文书
八年级语文教学反思
2014/02/11 职场文书
高中微机老师自我鉴定
2014/02/16 职场文书
合作协议书
2014/04/23 职场文书
商务英语专业求职信
2014/06/26 职场文书
民主评议党员登记表自我评价
2014/10/20 职场文书
安全生产工作汇报
2014/10/28 职场文书
2015年业务员工作总结范文
2015/04/07 职场文书
话题作文之关于呼唤
2019/11/29 职场文书
pytorch中Schedule与warmup_steps的用法说明
2021/05/24 Python
MySQL中使用or、in与union all在查询命令下的效率对比
2021/05/26 MySQL