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 相关文章推荐
Google AJAX 搜索 API实现代码
Nov 17 Javascript
js RuntimeObject() 获取ie里面自定义函数或者属性的集合
Nov 23 Javascript
jquery.ui.draggable中文文档(原文翻译)
Nov 15 Javascript
通过JQuery将DIV的滚动条滚动到指定的位置方便自动定位
May 05 Javascript
推荐8款jQuery轻量级树形Tree插件
Nov 12 Javascript
招聘网站基于jQuery实现自动刷新简历
May 10 Javascript
jQuery Select下拉框操作小结(推荐)
Jul 22 Javascript
Bootstrap幻灯片轮播图支持触屏左右手势滑动的实现方法
Oct 13 Javascript
vue.js 实现图片本地预览 裁剪 压缩 上传功能
Mar 01 Javascript
Node.js实现注册邮箱激活功能的方法示例
Mar 23 Javascript
如何检查一个对象是否为空
Apr 11 Javascript
vue 项目@change多个参数传值多个事件的操作
Jan 29 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与XML的PDF文档生成技术
2006/10/09 PHP
PHP Socket 编程
2010/04/09 PHP
php调用shell的方法
2014/11/05 PHP
php静态文件返回304技巧分享
2015/01/06 PHP
thinkPHP下的widget扩展用法实例分析
2015/12/26 PHP
php基于自定义函数记录log日志方法
2017/07/21 PHP
laravel框架使用阿里云短信发送消息操作示例
2020/02/15 PHP
Javascript实现的常用算法(如冒泡、快速、鸽巢、奇偶等)
2014/04/29 Javascript
Javascript实现简单二级下拉菜单实例
2014/06/15 Javascript
JS+CSS实现的拖动分页效果实例
2015/05/11 Javascript
javascript自动切换焦点控制效果完整实例
2016/02/02 Javascript
js html5 css俄罗斯方块游戏再现
2016/10/17 Javascript
vue.js指令v-for使用及索引获取
2016/11/03 Javascript
jquery获取元素到屏幕四周可视距离的方法
2018/09/05 jQuery
Vue的watch和computed方法的使用及区别介绍
2018/09/06 Javascript
angularJs利用$scope处理升降序的方法
2018/10/08 Javascript
jQuery使用bind动态绑定事件无效的处理方法
2018/12/11 jQuery
JavaScript代码调试方法实例小结
2019/01/05 Javascript
详解微信小程序scroll-view横向滚动的实践踩坑及隐藏其滚动条的实现
2019/03/14 Javascript
jQuery设置下拉框显示与隐藏效果的方法分析
2019/09/15 jQuery
vue开发中遇到的问题总结
2020/04/07 Javascript
vue组件是如何解析及渲染的?
2021/01/13 Vue.js
vue-resource 拦截器interceptors使用详解
2021/01/18 Vue.js
python实现dnspod自动更新dns解析的方法
2014/02/14 Python
Python中的元类编程入门指引
2015/04/15 Python
Python实现控制台输入密码的方法
2015/05/29 Python
浅谈python爬虫使用Selenium模拟浏览器行为
2018/02/23 Python
Python基础之字典常见操作经典实例详解
2020/02/26 Python
六年级学生评语
2014/04/22 职场文书
先进教师个人总结
2015/02/11 职场文书
现役军人家属慰问信
2015/03/24 职场文书
公司环境卫生管理制度
2015/08/05 职场文书
2016年党支部公开承诺书
2016/03/25 职场文书
2019年关于小学生课外阅读情况的分析报告
2019/12/02 职场文书
基于Redis实现分布式锁的方法(lua脚本版)
2021/05/12 Redis
Java使用HttpClient实现文件下载
2022/08/14 Java/Android