首页 > 其他分享 >手写单双向链表

手写单双向链表

时间:2023-06-21 19:03:32浏览次数:28  
标签:Node node list next 链表 add 双向 手写 null

手写双向链表

双向链表类(BidirectionalLinkedList)

public class BidirectionalLinkedList<E> {
	
	//元素个数
    transient int size = 0;//0
   	//第一个节点
    transient Node<E> first;//null
    //最后一个节点
    transient Node<E> last;//null
    
    //添加类
    public void add(E e){
    	 //final Node<E> l = last;
         final Node<E> newNode = new Node<>(last, e, null);
         if (first == null)
             first = newNode;
         else
             last.next = newNode;
         last = newNode;
    }
    
    //正序打印类
    public void positiveOrderPrint(){
    	Node<E> node = first;
    	while(node != null){
    		System.out.println(node.item);
    		node = node.next;
    	}
    }
    //倒序打印类
    public void reverseOrderPrint(){
    	Node<E> node = last;
    	while(node != null){
    		System.out.println(node.item);
    		node = node.prev;//找上一个
    	}
    }
	
	//节点类
    private static class Node<E> {
        E item;// 元素
        Node<E> next; //下一个节点地址
        Node<E> prev; // 上一个节点地址

        Node(Node<E> prev, E element, Node<E> next) {
            this.item = element;
            this.next = next;
            this.prev = prev;
        }
    }

测试类

public static void main(String[] args) {
		BidirectionalLinkedList<String> list = new BidirectionalLinkedList<>();
		list.add("aaa");
		list.add("bbb");
		list.add("ccc");
		list.add("ddd");
		list.add("eee");	
		
		list.positiveOrderPrint();
		
		System.out.println("-------------");
		list.reverseOrderPrint();
	}

测试结果

手写单双向链表_System

手写单向链表

在双向链表的基础上就可以将单向链表写出来

单向链表类(SinglyLinkedList)

public class SinglyLinkedList<E> {
	
	//元素个数
    transient int size = 0;//0
   	//第一个节点
    transient Node<E> first;//null
    //最后一个节点
    transient Node<E> last;//null
    
    //添加类
    public void add(E e){
    	 //final Node<E> l = last;
         final Node<E> newNode = new Node<>(last, e, null);
         if (first == null)
             first = newNode;
         else
             last.next = newNode;
         last = newNode;
    }
    
    //正序打印类
    public void positiveOrderPrint(){
    	Node<E> node = first;
    	while(node != null){
    		System.out.println(node.item);
    		node = node.next;
    	}
    }
	
	//节点类
    private static class Node<E> {
        E item;// 元素
        Node<E> next; //下一个节点地址

        Node(Node<E> prev, E element, Node<E> next) {
            this.item = element;
            this.next = next;
        }
    }

测试类

public static void main(String[] args) {
		SinglyLinkedList<String> list = new SinglyLinkedList<>();
		list.add("aaa");
		list.add("bbb");
		list.add("ccc");
		list.add("ddd");
		list.add("eee");	
		
		list.positiveOrderPrint();

测试结果

手写单双向链表_双向链表_02


标签:Node,node,list,next,链表,add,双向,手写,null
From: https://blog.51cto.com/u_16154651/6530522

相关文章

  • 20230303 2.0. 数组和链表
    数组数组是最基本的构造类型,它是一组相同类型数据的有序集合。数组中的元素在内存中连续存放,用数组名和下标可以唯一地确定数组元素。链表链表是一种重要的基础数据结构,也是实现复杂数据结构的重要手段。它不按照线性的顺序存储数据,而是由若干个同一结构类型的“结点”依次......
  • 手写K8S的YAML很痛苦,看完这篇让你信手拈来
    写在开篇对于刚刚接触K8s的新手来说,手动编写K8s的YAML配置文件可能会是一件很麻烦的事情。因为,配置文件包含了许多复杂的对象和属性。比如Pod对象的各个字段、它们的含义以及可接受的值都有哪些?看完本篇可能会让你功力大增。本篇的内容虽然很基础,但很实用,说不定还真就有不知道的......
  • 手写K8S的YAML很痛苦,看完这篇让你信手拈来
    写在开篇对于刚刚接触K8s的新手来说,手动编写K8s的YAML配置文件可能会是一件很麻烦的事情。因为,配置文件包含了许多复杂的对象和属性。比如Pod对象的各个字段、它们的含义以及可接受的值都有哪些?看完本篇可能会让你功力大增。本篇的内容虽然很基础,但很实用,说不定还真就有不知道的......
  • 141. 环形链表 及其相关
    141.环形链表1.哈希表法:将节点依次加入set,如果有重复就是有环。publicclassSolution{publicbooleanhasCycle(ListNodehead){Set<ListNode>set=newHashSet<ListNode>();while(head!=null){if(!set.add(head)){......
  • UWB定位 三基站加一个标签UWB相关资料 dwm1000模块 uwb定位 ds-twr测距 dw1000模块,
    UWB定位三基站加一个标签UWB相关资料dwm1000模块uwb定位ds-twr测距dw1000模块,双边双向测距,研创物联代码,最多支持4基站8标签测距,基站和标签、信道、速率等配置可通过USB虚拟串口进行切换,支持连接官方上位机(有QT5源码),可实现测距显示及定位坐标解算并显示位置,原理图,PCB,手册等......
  • Vue2:怎么实现响应式双向绑定?
    一、vue2怎么实现双向绑定原理在Vue2中,双向绑定的实现是通过Vue2的响应式系统和数据绑定机制来完成的。下面是Vue2实现双向绑定的简要原理:数据劫持:当创建Vue实例时,Vue2会对data选项中的所有属性进行数据劫持。这通过使用Object.defineProperty()方法将每个属性转换为getter和s......
  • 手写PE文件
    构造PE文件需要将所需的结构逐一构建出来,即需要将IMAGE_DOS_HEADER、IMAGE_FILE_HEADER、IMAGE_OPTIONAL_HEADER、IMAGE_SECTION_HEADER、IMAGE_IMPORT_DESCRIPTOR和数据节构造好,进而完成整个PE文件的代码。1、构造IMAGE_DOS_HEADER结构在PE文件格式中以IMAGE_DOS_HEADER结构开......
  • 探索Obsidian:效率学习与自我接纳的双向之旅
    咕~我的obsidian年度插件分享&低效率区学渣的思考~_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1NR4y1Y7Jw/本文将对笔者的Obsidian使用经验进行全面梳理和反思,深入探讨其中的魅力与困惑,揭示其背后的双链笔记法的精髓。同时,笔者也会分享一些自己认为高效且有价值的Obs......
  • [python][图像切割]给定手写数字图片完成数字切割
    importtorchimporttorch.nnasnnfromtorchvisionimporttransformsfromPILimportImage,ImageOpsimportnumpyasnpimg=Image.open("QQ.png")imgdefCutImage(img):img=img.convert("L")threshold=128img=img.point(......
  • SQL语句_链表(下)
    Store_Info表:store_namesalesdateA50001-01-2000B20002-01-2000A150002-10-2000D100003-08-2000Sales表:salesdate20002-01-2000100003-08-200060004-08-200075005-08-2000表链接查询除了可以使用JOIN,还可以使......