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 相关文章推荐
基于jquery的模态div层弹出效果
Aug 21 Javascript
JS截取与分割字符串常用技巧总结
Nov 10 Javascript
vue,angular,avalon这三种MVVM框架优缺点
Apr 27 Javascript
精彩的Bootstrap案例分享 重点在注释!(选项卡、栅格布局)
Jul 01 Javascript
AngularJS基础 ng-keypress 指令简单示例
Aug 02 Javascript
解析Vue2.0双向绑定实现原理
Feb 23 Javascript
JavaScript面向对象精要(上部)
Sep 12 Javascript
vue 使用eventBus实现同级组件的通讯
Mar 02 Javascript
微信小程序实现评论功能
Nov 28 Javascript
jQuery的ztree仿windows文件新建和拖拽功能的实现代码
Dec 05 jQuery
微信小程序云开发之使用云数据库
May 17 Javascript
编写一个javascript元循环求值器的方法
Apr 14 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
Fine Uploader文件上传组件应用介绍
2013/01/06 PHP
php将gd生成的图片缓存到memcache的小例子
2013/06/05 PHP
PHP实现适用于文件内容操作的分页类
2016/06/15 PHP
PHP表单验证内容是否为空的实现代码
2016/11/14 PHP
利用PHP判断是否是连乘数字串的方法示例
2017/07/03 PHP
PHP实现常用排序算法的方法
2020/02/05 PHP
jQuery EasyUI 中文API Layout(Tabs)
2010/04/27 Javascript
指定位置如果有图片显示图片,无图片显示广告的JS
2010/06/05 Javascript
js string 转 int 注意的问题小结
2013/08/15 Javascript
ie中js创建checkbox默认选中问题探讨
2013/10/21 Javascript
extJS中常用的4种Ajax异步提交方式
2014/03/07 Javascript
JS设置网页图片vspace和hspace属性的方法
2015/04/01 Javascript
微信小程序 获取相册照片实例详解
2016/11/16 Javascript
判断div滑动到底部的scroll实例代码
2017/11/15 Javascript
Vue-cli中为单独页面设置背景色的实现方法
2018/02/11 Javascript
JS中的JSON对象的定义和取值实现代码
2018/05/09 Javascript
Angular使用Restful的增删改
2018/12/28 Javascript
vue+element项目中过滤输入框特殊字符小结
2019/08/07 Javascript
Vue 利用指令实现禁止反复发送请求的两种方法
2019/09/15 Javascript
[34:39]DOTA2上海特级锦标赛主赛事日 - 4 败者组第四轮#1COL VS EG第二局
2016/03/05 DOTA
[58:32]EG vs Liquid 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
[49:59]KG vs Mineski 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
Python3使用requests包抓取并保存网页源码的方法
2016/03/15 Python
Python简单实现子网掩码转换的方法
2016/04/13 Python
python3调用百度翻译API实现实时翻译
2018/08/16 Python
python tkinter图形界面代码统计工具
2019/09/18 Python
Python实现bilibili时间长度查询的示例代码
2020/01/14 Python
为2021年的第一场雪锦上添花:用matplotlib绘制雪花和雪景
2021/01/05 Python
英国最大的运动营养公司之一:LA Muscle
2018/07/02 全球购物
Ryderwear澳洲官网:澳大利亚高端健身训练装备品牌
2018/09/18 全球购物
中层干部竞争上岗演讲稿
2014/01/13 职场文书
优秀党员获奖感言
2014/02/18 职场文书
2014年护理部工作总结
2014/11/14 职场文书
药店营业员岗位职责
2015/04/14 职场文书
解决numpy数组互换两行及赋值的问题
2021/04/17 Python
详解CSS伪元素的妙用单标签之美
2021/05/25 HTML / CSS