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刷新站IP和PV
Sep 05 Javascript
js event事件的传递与冒泡处理
Dec 06 Javascript
jQuery Tools Dateinput使用介绍
Jul 14 Javascript
js实现类似菜单风格的TAB选项卡效果代码
Aug 28 Javascript
angular+ionic返回上一页并刷新页面
Aug 08 Javascript
基于js中document.cookie全面解析
Sep 14 Javascript
jQuery 防止相同的事件快速重复触发方法
Feb 08 jQuery
浅谈在vue中使用mint-ui swipe遇到的问题
Sep 27 Javascript
JS中使用new Option()实现时间联动效果
Dec 10 Javascript
详解如何在Vue项目中发送jsonp请求
Oct 25 Javascript
JavaScript设计模式之门面模式原理与实现方法分析
Mar 09 Javascript
React冒泡和阻止冒泡的应用详解
Aug 18 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 If Else(elsefi) 语句
2013/04/07 PHP
浅析PKI加密解密 OpenSSL
2013/07/01 PHP
php文件服务实现虚拟挂载其他目录示例
2014/04/17 PHP
php判断类是否存在函数class_exists用法分析
2014/11/14 PHP
PHP判断一个变量是否为整数、正整数的方法示例
2019/09/11 PHP
用js实现计算代码行数的简单方法附代码
2007/08/13 Javascript
同一个表单 根据要求递交到不同页面的实现方法小结
2009/08/05 Javascript
$.get获取一个文件的内容示例代码
2013/09/11 Javascript
js菜单点击显示或隐藏效果的简单实例
2014/01/13 Javascript
Jquery焦点图实例代码
2014/11/25 Javascript
JSON简介以及用法汇总
2016/02/21 Javascript
jQuery实现单击按钮遮罩弹出对话框效果(2)
2017/02/20 Javascript
VueJs监听window.resize方法示例
2018/01/17 Javascript
jQuery中的$是什么意思及 $. 和 $().的区别
2018/04/20 jQuery
Vue实现简易翻页效果源码分享
2018/11/08 Javascript
js中innerText/textContent和innerHTML与target和currentTarget的区别
2019/01/21 Javascript
JS集合set类的实现与使用方法示例
2019/02/01 Javascript
ES6模板字符串和标签模板的应用实例分析
2019/06/25 Javascript
Vue axios 将传递的json数据转为form data的例子
2019/10/29 Javascript
vue.js 输入框输入值自动过滤特殊字符替换中问标点操作
2020/08/31 Javascript
[00:12]DAC SOLO赛卫冕冠军 VG.Paparazi灬展现SOLO技巧
2018/04/06 DOTA
Python彩色化Linux的命令行终端界面的代码实例分享
2016/07/02 Python
关于numpy中np.nonzero()函数用法的详解
2017/02/07 Python
python 常见字符串与函数的用法详解
2018/11/23 Python
Python面向对象程序设计类的多态用法详解
2019/04/12 Python
​如何愉快地迁移到 Python 3
2019/04/28 Python
python 爬取百度文库并下载(免费文章限定)
2020/12/04 Python
css3实现超立体3D图片侧翻倾斜效果
2014/04/16 HTML / CSS
一款基于css3和jquery实现的动画显示弹出层按钮教程
2015/01/04 HTML / CSS
.NET面试题:什么是值类型和引用类型
2016/01/12 面试题
remote接口和home接口主要作用
2013/05/15 面试题
网络工程系信息安全技术专业大学生求职信
2013/10/22 职场文书
法制宣传教育方案
2014/05/09 职场文书
我们的节日元宵活动方案
2014/08/23 职场文书
2016教师给学生的毕业寄语
2015/12/04 职场文书
写自招自荐信的绝招!
2019/04/19 职场文书