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 if条件判断方法小结
May 17 Javascript
Jquery实现鼠标移动放大图片功能实例
Mar 25 Javascript
jQuery实现非常实用漂亮的select下拉菜单选择效果
Nov 06 Javascript
JavaScript+CSS实现的可折叠二级菜单实例
Feb 29 Javascript
jQuery实现级联下拉框实战(5)
Feb 08 Javascript
Bootstrap如何激活导航状态
Mar 22 Javascript
关于Node.js中Buffer的一些你可能不知道的用法
Mar 28 Javascript
详解webpack介绍&amp;安装&amp;常用命令
Jun 29 Javascript
JavaScript键盘事件常见用法实例分析
Jan 03 Javascript
js变量声明var使用与不使用的区别详解
Jan 21 Javascript
如何在JavaScript中谨慎使用代码注释
Jun 21 Javascript
Vue实现简单的跑马灯
May 25 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产生动态的影像图
2006/10/09 PHP
微信公众号模板消息群发php代码示例
2016/12/29 PHP
关于PHP5.6+版本“No input file specified”问题的解决
2019/12/11 PHP
十分钟打造AutoComplete自动完成效果代码
2009/12/26 Javascript
Javascript笔记一 js以及json基础使用说明
2010/05/22 Javascript
基于jquery的修改当前TAB显示标题的代码
2010/12/11 Javascript
jQuery的text()方法用法分析
2014/12/20 Javascript
html的DOM中document对象images集合用法实例
2015/01/21 Javascript
jQuery实现仿美橙互联两级导航菜单效果完整实例
2015/09/17 Javascript
javascript使用递归算法求两个数字组合功能示例
2017/01/03 Javascript
关于vue.extend和vue.component的区别浅析
2017/08/16 Javascript
JS实现左边列表移到到右边列表功能
2018/03/28 Javascript
微信小程序实现左侧滑动导航栏
2020/04/08 Javascript
Vue vm.$attrs使用场景详解
2020/03/08 Javascript
[04:03]2014DOTA2西雅图国际邀请赛 LGD战队巡礼
2014/07/07 DOTA
[59:35]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#1COL VS Alliance第二局
2016/03/04 DOTA
python3+mysql查询数据并通过邮件群发excel附件
2018/02/24 Python
Python使用字典的嵌套功能详解
2019/02/27 Python
Python使用itchat模块实现群聊转发,自动回复功能示例
2019/08/26 Python
Python流程控制 if else实现解析
2019/09/02 Python
Django自定义全局403、404、500错误页面的示例代码
2020/03/08 Python
详解pytorch中squeeze()和unsqueeze()函数介绍
2020/09/03 Python
网页中的电话号码如何实现一键直呼效果_附示例
2016/03/15 HTML / CSS
TripAdvisor日本:全球领先的旅游网站
2019/02/14 全球购物
Amcal中文官网:澳洲综合性连锁药房
2019/03/28 全球购物
Linden Leaves官网:新西兰纯净护肤品
2020/12/20 全球购物
异步传递消息系统的作用
2016/05/01 面试题
大型晚会策划方案
2014/02/06 职场文书
《童年》教学反思
2014/02/18 职场文书
人事行政助理岗位职责
2015/04/11 职场文书
药品开票员岗位职责
2015/04/15 职场文书
redis连接被拒绝的解决方案
2021/04/12 Redis
Python编程根据字典列表相同键的值进行合并
2021/10/05 Python
Nginx设置HTTPS的方法步骤 443证书配置方法
2022/03/21 Servers
码云(gitee)通过git自动同步到阿里云服务器
2022/12/24 Servers
Win10本地连接不见了怎么恢复? win10系统电脑本地连接不见了解决方法
2023/01/09 数码科技