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 - 如何引入js代码
Mar 09 Javascript
javascript 表单规则集合对象
Jul 21 Javascript
jquery-easyui关闭tab自动切换到前一个tab
Jul 29 Javascript
Jquery之Ajax运用 学习运用篇
Sep 26 Javascript
jquery 绑定回车动作扑捉回车键触发的事件
Mar 26 Javascript
javascript基础语法学习笔记
Jan 04 Javascript
深入理解$.each和$(selector).each
May 15 Javascript
微信小程序 欢迎页面的制作(源码下载)
Jan 09 Javascript
简单实现AngularJS轮播图效果
Apr 10 Javascript
jQuery实现DIV响应鼠标滑过由下向上展开效果示例【测试可用】
Apr 26 jQuery
Vue 中使用 typescript的方法详解
Feb 17 Javascript
vue引入Excel表格插件的方法
Apr 28 Vue.js
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数据库连接类~~做成一个分页类!
2006/11/25 PHP
PHP安全配置
2006/12/06 PHP
php四种基础算法代码实例
2013/10/29 PHP
zf框架的Filter过滤器使用示例
2014/03/13 PHP
PHP7 其他修改
2021/03/09 PHP
js跨域和ajax 跨域问题的实现思路
2009/09/05 Javascript
js模拟滚动条(横向竖向)
2013/02/22 Javascript
子窗体与父窗体传值示例js代码
2013/08/01 Javascript
客户端js判断文件类型和文件大小即限制上传大小
2013/11/20 Javascript
jQuery.position()方法获取不到值的安全替换方法
2015/03/13 Javascript
教你用javascript实现随机标签云效果_附代码
2016/03/16 Javascript
jQuery ajax MD5实现用户注册即时验证功能
2016/10/11 Javascript
手机端转换rem适应
2017/04/01 Javascript
Vue 2.0的数据依赖实现原理代码简析
2017/07/10 Javascript
jQuery中 DOM节点操作方法大全
2017/10/12 jQuery
AngularJS标签页tab选项卡切换功能经典实例详解
2018/05/16 Javascript
微信小程序的部署方法步骤
2018/09/04 Javascript
2种在vue项目中使用百度地图的简单方法
2018/09/28 Javascript
angular异步验证防抖踩坑实录
2019/12/01 Javascript
js实现图片实时时钟
2020/01/15 Javascript
python 图片验证码代码分享
2012/07/04 Python
flask框架实现连接sqlite3数据库的方法分析
2018/07/16 Python
python抓取京东小米8手机配置信息
2018/11/13 Python
Python 最大概率法进行汉语切分的方法
2018/12/14 Python
Python使用post及get方式提交数据的实例
2019/01/24 Python
Python中如何使用if语句处理列表实例代码
2019/02/24 Python
Python3实现计算两个数组的交集算法示例
2019/04/03 Python
selenium与xpath之获取指定位置的元素的实现
2021/01/26 Python
银河香水:Galaxy Perfume
2019/03/25 全球购物
阿迪达斯希腊官方网上商店:adidas希腊
2019/04/06 全球购物
法国床上用品商店:La Compagnie du lit
2019/12/26 全球购物
互联网电子商务专业毕业生求职信
2014/03/18 职场文书
纪检干部现实表现材料
2014/08/21 职场文书
幼儿园大班个人总结
2015/02/28 职场文书
幼儿园六一儿童节主持词
2015/06/30 职场文书
微信小程序APP页面的之间的相互传递参数以及自定义组件
2022/04/19 Javascript