java实现循环双链表

《SOC架构-ARM架构-文档导读》-目录 小白请看“Armv8/Armv9架构从入门到精通”专栏。以翻译为主的,深度深度深度深度/深入深入深入 学习ARM架构的文章。 阅读详情
/**
 * 循环双链表的简单实现
 * 
 * @author Linging
 * @date 2019/2/9
 * 
 * 注:java自带的集合包有实现双链表
 */

public class DoubleList<T> {
	//表头
	public DNode<T> head;
	
	//节点个数
	private int Count;
	
	//定义节点结构体
	class DNode<T>{
		private DNode pre;    //链接前一个节点
		private DNode next;   //链接下一个节点
		private T value;      //节点值
		
		public DNode(T value, DNode pre, DNode next) {
			this.next = next;
			this.pre = pre;
			this.value = value;
		}
	}
	
	//构造函数
	public DoubleList() {
		//创建头节点并制为null。(头节点为空节点)
		head = new DNode<T>(null, null, null);
		head.next = head.pre = head;
		Count = 0;
	}
	
	//返回节点个数
	public int size() {
		return Count;
	}
	
	//判断双链表是否为空
	public boolean isEmpty() {
		return Count == 0;
	}
	
	//返回index位置的节点
	public DNode<T> getNode (int index){
		if(index <= 0 || index > Count) 
			throw new IndexOutOfBoundsException();
		
		//正向查找
		if(index <= Count/2) {
			DNode<T> node = head.next;  //指向首节点
			for(int i = 1; i < index; i++) {
				node = node.next;
			}
			return node;
		}
		
		//反向查找
		DNode<T> node = head.pre;    //指向尾节点
		int rindex = Count - index;
		for(int j = 0; j < rindex; j++) {
			node = node.pre;
		}
		return node;
	}
	
	//获取第index位置的节点值
	public T get(int index) {
		return getNode(index).value;
	}
	
	//获取第一个节点的值
	public T getFirst() {
		return getNode(1).value;
	}
	
	//获取最后一个节点的值
	public T getLast() {
		return getNode(Count).value;
	}
	
	//将节点t插入到index位置
	public void insert(int index, T t) {
		if(index == 1) {
			DNode<T> tnode = new DNode<T>(t, head, head.next);
			head.next.pre = tnode;
			head.next = tnode;
			Count++;
			return;
		}
		 DNode<T> inode = getNode(index);
		 DNode<T> tnode = new DNode<T>(t, inode.pre, inode);
		 inode.pre.next = tnode;
		 inode.pre = tnode;
		 Count++;
		 return ;
	}
	
	 // 将节点追加到链表的末尾
	    public void appendLast(T t) {
	       DNode<T> node = new DNode<T>(t, head.pre,head);
	       head.pre.next = node;
	       head.pre = node;
	       Count++;
	    }
	     
	  //打印全部节点
	     public void print() {
	    	 for(int i = 1; i <= Count; i++) {
	    		 System.out.println(getNode(i).value);
	    	 }
	     }
	   
	  //删除index位置的节点
	   public void delete(int index) {
		   DNode<T> node = getNode(index);
		   node.next.pre = node.pre;
		   node.pre.next = node.next;
		   node = null;
		   Count--;
	   }
	   
	public static void main(String[] args) {
		DoubleList<String> dl = new DoubleList<String>();
		try {
			//按顺序依次插入节点1,2,3,4
			System.out.println("依次插入节点1、2、3、4:");
			dl.appendLast("1");
			dl.appendLast("2");
			dl.appendLast("3");
			dl.appendLast("4");
			dl.print();
			System.out.println("节点个数为:"+dl.Count);
			
			//在双链表第4个节点处插入一个节点7
			System.out.println("\n"+"在双链表第4个节点处插入一个节点7:");
			dl.insert(4, "7");
			dl.print();
			System.out.println("节点个数为:"+dl.Count);
			
			//删除第3个节点
			System.out.println("\n"+"删除第3个节点");
			dl.delete(3);
			dl.print();
			System.out.println("节点个数为:"+dl.Count);
			
			//打印双链表
			System.out.println("\n"+"打印双链表:");
			dl.print();	
			System.out.println("节点个数为:"+dl.Count);
			System.out.println("双链表是否为空:"+dl.isEmpty());
			
		}catch(IndexOutOfBoundsException e) {
			e.getStackTrace();
		}
		
	}
}

转载请注明出处:http://www.cnblogs.com/skywang12345/p/3561803.html

DeepSeek在实时计算与流处理系统中的突破性实践 对于技术决策者而言,现在正是将DeepSeek实时计算技术纳入企业架构蓝图的关键时机,那些能够率先构建实时智能能力的企业,将在数据驱动的商业竞争中赢得决定性优势。DeepSeek通过创新的流处理架构,成功将复杂事件处理(CEP)的延迟降低到亚秒级,同时保证了计算结果的精确性。DeepSeek研发的神经架构搜索(NAS)与知识蒸馏联合优化框架,可在保持模型精度的前提下,将参数量压缩至原始模型的1/100,实现边缘设备的实时AI推理。随着5G和物联网技术的普及,对实时处理能力的需求将呈指数级增长。 阅读详情

相关推荐

DDPG算法实战:用Python一步步实现深度强化学习中的连续动作控制

本文详细介绍了DDPG算法在深度强化学习中的连续动作控制应用,通过Python和PyTorch实现从零构建智能体。内容涵盖环境搭建、网络架构设计、经验回放、OU噪声实现及训练流程优化,帮助开发者掌握DDPG在机械臂控制等场景的核心技术。

weixin_30335575的博客 407

给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。请你将两个数相加,并以相同形式返回一个表示和的链表。

力扣原题:两数相加。 先贴代码: public ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode l3 = new ListNode(-1); //定义一个新链表的头节点l3 ListNode node3 = l3; //定义头节点的副本node3 int ex = 0; //定义一个进位值ex while (l1 != null || l2 != null){.

小型骷髅的博客 1万+

别再手动更新Excel了!用Jira看板管理你的个人项目(附保姆级配置流程)

本文详细介绍了如何利用Jira看板替代Excel进行个人项目管理,提供从注册到配置的保姆级教程。通过极简看板模式、自动化规则和数据分析功能,帮助用户实现任务可视化、协作高效化和提醒自动化,大幅提升个人工作效率。特别适合需要管理复杂个人项目的用户。

weixin_42699679的博客 224

【数据结构】线性表 ⑤ ( 双循环链表 | 双循环链表特点 | 双循环链表插入操作处理 | 代码示例 - 使用 Java 实现 双循环链表 )

一、双循环链表 二、双循环链表特点 三、双循环链表插入操作处理 四、代码示例 - 使用 Java 实现 双循环链表

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 2885

告别迷茫!新手如何从RTKLIB命令行程序入手,快速理解GNSS解算全流程

本文为GNSS新手提供RTKLIB命令行程序实战指南,重点介绍如何通过`rnx2rtkp`后处理解算工具快速掌握GNSS解算全流程。从环境搭建、程序编译到核心算法解析,帮助读者理解RTKLIB源码结构,并通过真实数据处理案例演示完整解算过程,是入门GNSS定位技术的实用教程。

weixin_42524226的博客 354

Altium AD20差分对走线设置方法

AD20的PCB差分对走线设置 1、原理图添加差分对 先在原理图中,讲要设置差分对的网络对添加网络标签。 名称前面的内容要相同,后缀用 _P 和 _N 加以区分。 最后使用 放置差分对,将两个网络标记。 2、编译,更改到PCB 编译,更新到PCB,确认差分对网络的出现。 验证更改,执行更改。将改动更新到PCB中。 PCB中,可通过 右下角 Panels - 调出 PCB 显示。来对已添加的差分对进行查看。 这时原本的走线有一点点小问题,需要删掉原来走线,设置差分对规则,并重新布线。

Mark_md的博客 3万+

数据结构:Java实现循环单链表(超详细)

java实现循环链表 实现一个循环链表(单链表),具备增加元素、删除元素、打印循环链表等功能。 一丶单向循环链表 就是为尾节点指向头结点 二丶单向循环链表的接口设计 比较单向链表,单向循环链表只需要修改添加节点,删除节点两个方法,也就是add和remove方法 三丶单向循环链表的实现 3.1添加节点 相比于单向链表,单向循环链表只需要特别关注插入头结点的情况即可 需要考虑的特殊情况是当链表的长度为0的时候的插入的情况 创建节点类 package LoopTable;...

qq_51066068的博客 7806

Android BluetoothSocket

BluetoothSocket是Android中用于在蓝牙设备之间进行数据传输的一种Socket。它提供了一种类似于TCP/IP协议的数据传输方式,可以在两个设备之间建立一个虚拟的通信管道,使得两个设备之间可以进行数据的传输和接收。BluetoothSocket可以用于客户端和服务端之间的通信,通过BluetoothSocket可以实现数据的双向传输。

liuning1985622的博客 1473

java基础-双向循环链表

小伙伴们,你们好呀!我是老寇! 前文介绍了java基础-链表 双向循环链表就是链表的升级版,多了有头,尾指针之分,指针的方向是双向的!!! 首先创一个节点类: package cn.itcast.huahai.linklist; //AnyType表示任意类型 public class DulNode<AnyType>{ public AnyType data;//数值 public DulNode<AnyType> next;//前驱节点 publi.

. 3万+

IDEA 2023.2最新破解安装教程(含详细配置步骤及常见问题解决)

本文详细介绍了IDEA 2023.2的安装流程及高效开发环境搭建指南,涵盖基础配置、项目结构优化、核心功能使用、插件推荐、性能优化等全方位内容,帮助开发者快速掌握这一强大的Java开发工具。

x2y3z4a5b的博客 1726

基于YOLOv11的手写数字与符号识别系统设计与实现

手写数字与符号识别系统需要丰富多样的训练数据才能达到理想的泛化性能。MNIST:包含70,000个手写数字样本(0-9),28x28灰度图像优点:干净整齐,适合初学者缺点:多样性不足,只有数字EMNIST:MNIST的扩展,包含数字、字母(大小写)和特殊符号样本量:814,255张图像覆盖62个类别(10数字+26小写字母+26大写字母)HASYv2:专门的手写符号数据集包含369个不同符号类别约168,000个标注实例包括数学符号、箭头、括号等:英文手写文本数据库。

YOLO 287

JAVA实现双向链表

4.A r r a y L i s t 和 L i n k e d L i s t 的 区 别。以上都是我们自己手动实现双链表,接下来简单介绍一下LinkedList。这里对于size()、display()方法不在赘述,同单链表一样。这里需要考虑是从头删,还是从尾删,以及普通位置删除。2.LinkedList的使用。3.LinkedList的遍历。5.删除所有值为key的数值。3.在指定位置插入数据。4.删除指定的key。6.删除链表中的所有值。这里只列举一些常用的。

2301_80501383的博客 556

华为OD机试 新系统 双机位C卷 往年真题 机考题库(持续收录中)以及算法考点详解

每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

学Java,找哪吒 7万+

Java实现循环双链表

使用Java语言实现了一个双链表,可进行数据元素的增、删、查。 代码实现如下: import org.jetbrains.annotations.NotNull; import java.util.Iterator; public class DoubleLink<T> implements Iterable<T> { //创建一个双链表类型的结点匿名内部类 private class Node { //数据域,存放T类型的数据

weixin_46944732的博客 783

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

循环双链表-JAVA语言实现

定义循环双链表类。 package DoubleLinkList; public class DoubleNode { DoubleNode pre = this; DoubleNode next = this; int data; //创建构造函数 public DoubleNode(int data) { this.data = data; } //增加节点 ...

Lau's Blog 489

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Java实现带头结点的循环双链表

最近又回顾了一下数据结构链表的实现,就随便写了一个带头结点的循环双链表的实现,如果有不当的地方,希望大家多多指教。 话不多说,代码走起 1. 准备gong

yunshangguafan的博客 403

java数据结构之循环双链表

感谢tu451953337的分享 原文链接地址:点击打开链接 这个循环双链表写的相当不错,注释解析也很清晰。是个不错的博文! public class DbLinkedList   {              //定义内部类,用作链表的节点       private class Node       {           Node pre; //指向前一个节点

林老师带你学编程 2186

循环双链表Java

参考 算法导论 java数据结构与算法之双链表设计与实现 package com.example; import com.sun.org.apache.bcel.internal.classfile.PMGClass; import com.sun.org.apache.bcel.internal.generic.IF_ACMPEQ; import java.util.ArrayList...

谢耀眼 273

数据结构学习----线性表的链式表示之循环双链表(Java实现)

线性表接口LList: package com.clarck.datastructure.dlinked; /** * 线性表接口LList,描述线性表抽象数据类型,泛型参数T表示数据元素的数据类型 * * @author clarck * */ public interface LList { /** * 判断线性表是否空 * @return

雪夜&流星的专栏 1169

循环双链表之Java实现(模拟JDK中LinkedList)

单链表只有一个指针,仅仅指向当前结点的直接后继,为了弥补这个缺陷,故而引入双链表。 所谓双链表,就是每个Element都包含它本身存储的数据和两个指针,分别指向上一个和下一个Element,其结构如下: 我们可以很容易的写出表示链表结点的Java Code: private T value=null;//use storage data

ilemon 1037

两条循环双链表的连接JAVA_数据结构学习----线性表的链式表示之循环双链表(Java实现)...

packagecom.clarck.datastructure.dlinked;/*** 循环双链表**@authorclarck**@param*/public class CirDoublyLinkedList implements LList{/*** 头节点*/public DLinkNodehead;/*** 默认构造方法,构造空循环双链表** 创建头结点,3个域值均为null*/pub...

weixin_42131352的博客 255

java数据结构与算法之双链表设计与实现

java数据结构与算法之双链表设计与实现 java数据结构与算法之顺序表与链表设计与实现分析 java数据结构与算法之双链表设计与实现 java数据结构与算法之改良顺序表与双链表类似ArrayList和LinkedList(带Iterator迭代器与fast-fail机制) java数据结构与算法之栈(Stack)设计与实现 java数据结构与算法之队列(Queue)设计与实现 java数据结构与算法之递归思维(让我们更通俗地理解递归) java数据结构与算法之树基本概念及二叉树(BinaryTre.

apple_4872330的专栏 226

java实现双向循环链表(循环双链表)

若是不清楚链表的结构,该篇文章不适合观看,这里只做文字说明,没有链表结构的图示

初心不忘、始终方得 6314

数据结构--循环双链表实现、详解

双链表 双链表的插入和删除操作 在p节点之前插入值为x的节点 在p节点之后插入值为x的节点 双链表的删除操作 双链表节点 package pers.zhang.linearList; /** * @author zhang * @date 2020/1/15 - 11:06 * 双链表节点类 */ public class DLinkNode<T> { ...

吴声子夜歌的博客 2052

java数据结构--循环双向链表的实现

package com.zjp.structures; public class LoopDoubleLinkedList<T> { LDNode head;//不带数据的头结点 public LoopDoubleLinkedList() { this.head = new LDNode(); this.head.next = h...

pengge_zjp的博客 506

循环单链表基本操作的java代码实现(使用java语言实现循环单链表的创建【头插】【尾插】、插入)

循环双链表节点结构定义 /** * className:Node * * @author:zjl * @version:0.1 * @date:2020/7/1016:35 * @since:jdk1.8 */ public class Node { private Object data; private Node next; public Node(Object data, Node next) { this.data = data;

weixin_38334306的博客 740

数据结构与算法--使用Java实现循环双链的LinkedList

上一篇博客中,使用Java实现了单链的LinkedList,博客链接如下: 数据结构与算法–使用Java实现单链的LinkedList 但我们知道,在Java源码里LinkedList的是循环双链, 并非上篇博客中的单链,为了能更深入的LinkedList 本篇博客将用循环双链实现LinkedList的基本功能. 本篇博客要点如下: 双向链表简介 基本概念 存储结构 使用Java代码实现循环双...

.... 1180
上一篇: java泛型
下一篇: java单链表的简单实现
Linging_24
博客等级 码龄8年 321粉丝 202原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值