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 相关文章推荐
一个很酷的拖动层的js类,兼容IE及Firefox
Jun 23 Javascript
滚动条变色 隐藏滚动条与双击网页自动滚屏显示代码
Dec 28 Javascript
关于二级域名下使用一级域名下的COOKIE的问题
Nov 07 Javascript
JS实现根据出生年月计算年龄
Jan 10 Javascript
jQuery实现瀑布流的取巧做法分享
Jan 12 Javascript
浅谈JS中json数据的处理
Jun 30 Javascript
js 获取元素所有兄弟节点的实现方法
Sep 06 Javascript
使用JavaScript实现alert的实例代码
Jul 06 Javascript
记React connect的几种写法(小结)
Sep 18 Javascript
从零撸一个pc端vue的ui组件库( 计数器组件 )
Aug 08 Javascript
javascript实现文字跑马灯效果
Jun 18 Javascript
JavaScript实现缓动动画
Nov 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
phpBB BBcode处理的漏洞
2006/10/09 PHP
php设计模式之观察者模式的应用详解
2013/05/21 PHP
php echo, print, print_r, sprintf, var_dump, var_expor的使用区别
2013/06/20 PHP
本地机apache配置基于域名的虚拟主机详解
2013/08/10 PHP
IIS下PHP的三种配置方式对比
2014/11/20 PHP
PHP程序员的技术成长规划
2016/03/25 PHP
JavaScript获得选中文本内容的方法
2008/12/02 Javascript
jquery中交替点击事件的实现代码
2014/02/14 Javascript
JS的encodeURI和java的URLDecoder.decode使用介绍
2014/05/08 Javascript
基于jquery和svg实现超炫酷的动画特效
2014/12/09 Javascript
Bootstrap实现默认导航栏效果
2020/09/21 Javascript
前端性能优化及技巧
2016/05/06 Javascript
AngularJs Forms详解及简单示例
2016/09/01 Javascript
jQuery中fadein与fadeout方法用法示例
2016/09/16 Javascript
js实现tab选项卡切换功能
2017/01/13 Javascript
使用Node.js实现ORM的一种思路详解(图文)
2017/10/24 Javascript
JS+canvas画一个圆锥实例代码
2017/12/13 Javascript
node.js中路由,中间件,ge请求和post请求的参数详解
2017/12/26 Javascript
详解vue-cli 快速搭建单页应用之遇到的问题及解决办法
2018/03/01 Javascript
js的各种数据类型判断的介绍
2019/01/19 Javascript
微信小程序实现多个按钮的颜色状态转换
2019/02/15 Javascript
详解在Angular4中使用ng2-baidu-map的方法
2019/06/19 Javascript
python网络编程之UDP通信实例(含服务器端、客户端、UDP广播例子)
2014/04/25 Python
python字典序问题实例
2014/09/26 Python
matplotlib作图添加表格实例代码
2018/01/23 Python
python文字和unicode/ascll相互转换函数及简单加密解密实现代码
2019/08/12 Python
Python3 + Appium + 安卓模拟器实现APP自动化测试并生成测试报告
2021/01/27 Python
详解纯CSS3制作的20种loading动效
2017/07/05 HTML / CSS
一个J2EE项目团队的主要人员组成是什么
2012/06/04 面试题
教师自我评价范例
2013/09/24 职场文书
活动总结书
2014/05/08 职场文书
2015新年寄语大全
2014/12/08 职场文书
民政工作个人总结
2015/02/28 职场文书
九九重阳节致辞
2015/07/31 职场文书
2016北大自主招生自荐信模板
2016/01/28 职场文书
Pytorch中expand()的使用(扩展某个维度)
2022/07/15 Python