首页 > 编程语言 >简单模拟一个双向链表,用java实现

简单模拟一个双向链表,用java实现

时间:2022-09-22 15:44:52浏览次数:57  
标签:Node pre java next 链表 add 双向 intList public

 1 package com.gsh.test05;
 2 
 3 /**
 4  * 节点类
 5  * @param <E>
 6  */
 7 public class Node<E> {
 8     private Node<E> pre;
 9     private E element;
10     private Node<E> next;
11 
12     public Node<E> getPre() {
13         return pre;
14     }
15 
16     public void setPre(Node<E> pre) {
17         this.pre = pre;
18     }
19 
20     public E getElement() {
21         return element;
22     }
23 
24     public void setElement(E e) {
25         this.element = e;
26     }
27 
28     public Node<E> getNext() {
29         return this.next;
30     }
31 
32     public void setNext(Node<E> next) {
33         this.next = next;
34     }
35 
36     @Override
37     public String toString() {
38         return "Node{" +
39                 "pre=" + pre +
40                 ", element=" + element +
41                 ", next=" + next +
42                 '}';
43     }
44 
45 }
 1 package com.gsh.test05;
 2 
 3 /**
 4  * 构建一个模拟的双向链表
 5  * @param <E>
 6  */
 7 
 8 public class MyLinkedList<E> {
 9     private Node<E> headNode;
10     private Node<E> tailNode;
11     private int count = 0;
12 
13     public MyLinkedList() {
14     }
15 
16     public void add(E e) {
17         //将添加的元素封装位一个对象
18         Node<E> n = new Node<>();
19         n.setElement(e);
20 
21         if (headNode == null) {//如果是第一个节点
22             n.setPre(null);
23             //将当前头节点指向该节点
24             headNode = n;
25         } else {//非第一个节点
26             n.setPre(tailNode);
27             n.getPre().setNext(n);
28         }
29 
30         n.setNext(null);
31         //将当尾头节点指当前该节点
32         tailNode = n;
33         count++;
34     }
35 
36     public int getSize(){
37         return this.count;
38     }
39 
40     public E getElement(int index){
41         if(index<0||index>=count){
42             throw new IndexOutOfBoundsException();
43         }
44         Node<E> n = headNode;
45         for (int i = 0; i < index; i++) {
46             n=n.getNext();
47         }
48         return n.getElement();
49     }
50     public static void main(String[] args) {
51         MyLinkedList<String> intList = new MyLinkedList<>();
52         intList.add("aa");
53         intList.add("bb");
54         intList.add("cc");
55         intList.add("dd");
56         intList.add("ee");
57         intList.add("ff");
58         String s = intList.getElement(6);
59         System.out.println(s);
60     }
61 }

 

标签:Node,pre,java,next,链表,add,双向,intList,public
From: https://www.cnblogs.com/zhgsh/p/16719536.html

相关文章

  • JAVA方法
    结构化编程:把一个大模块分成小模块,再把小模块分成更细的小模块,一个模块对应于一个单元。Modules(模块):将一个复杂的系统划分为子模块,便于设计、实现和维护;Java中的程序模......
  • 未来市场对JAVA的需求高吗?
    目前java非常火,应用非常的广泛,是目前最火的行业之一,竞争很大,工资很高,未来发展也极好。Java语言跨平台、安全性等特点,成为众多大型项目应用中最理想的开发语言,Java程序员......
  • java反射前及反射后类的实例化等操作
    什么是反射?java的反射就是利用Class对象在运行阶段获取任何类的各种信息,从而可以实例化对象,访问对象的方法和属性的这么一种机制。什么时候使用反射?在某种业务场景下,无......
  • Java中使用Hutool的ExecutorBuilder实现自定义线程池
    场景Java中ExecutorService线程池的使用(Runnable和Callable多线程实现):https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/126242904SpringBoot+Lombok+Bui......
  • java学习笔记25
    java数组数组的定义数组是相同类型数据的有序集合。数组描述的是相同类型的若干个数据按照一定的先后次序排列组合而成。其中,每一个数据称作一个数组元素,每个数组元素......
  • java学习笔记26
    java数组数组的使用普通的for循环publicclassDemo03{  publicstaticvoidmain(String[]args){    int[]arrays={1,2,3,4,5};    //打印......
  • java - @Async 具体使用
    1.开启  @Async异步能力添加注解 @EnableAsync,可以放在启动类上,也可以在任意配置类上,因为我是需要配置自定义线程池,因此放在配置类上importorg.springframework.c......
  • JAVA常用工具类
    java开发常用工具类java正则表达式的匹配包括:邮箱,手机,姓名,昵称,身份证号,银行卡号等;生成6位随机数;对url中字符串进行编码和解码;获取客户端ip地址;获取系统当前时间;生......
  • java中String的常用方法
    1、length()字符串的长度例:charchars[]={'a','b'.'c'};Strings=newString(chars);intlen=s.length();2、charAt()截取一个字符例:charch......
  • JAVA中容器设计的进化史:从白盒到黑盒,再到跻身为设计模式之一的迭代器
    大家好,又见面了。在我们的项目编码中,不可避免的会用到一些容器类,我们可以直接使用List、Map、Set、Array等类型。当然,为了体现业务层面的含义,我们也会根据实际需要自行封......