C#单向链表实现:使用泛型的方法设计

目录

1.先设计一个泛型节点类Node

2.再设计一个泛型链表类LinkedList

3.创建一个LinkedList类的实例

4.完整的实例


        再发一篇使用泛型的方法设计单向链表。

        以下是一个使用泛型节点类和LinkedList<T>类的示例,其中包含Insert方法用于插入新节点,并在插入后更新当前节点。同时,GetCurrentValue方法用于获取当前节点的值,并将其转换为int类型。 

1.先设计一个泛型节点类Node<T>

 /// <summary>/// 定义泛型节点类/// </summary>public class Node<T>(T data){public T Data { get; set; } = data;public Node<T>? Next { get; set; } = null;}

2.再设计一个泛型链表类LinkedList<T>

         定义一个包含Insert和GetCurrentValue方法的LinkedList<T>类:

 /// <summary>/// 定义泛型链表类LinkedList<T>/// </summary>public class LinkedList<T> where T : struct{private Node<T>? head;private Node<T>? current;public void Insert(T value){var newNode = new Node<T>(value);if (head == null){head = newNode;current = newNode;}else{Node<T> temp = head;while (temp.Next != null){temp = temp.Next;}temp.Next = newNode;current = newNode;}}// 定义GetCurrentValue()方法,获取当前节点public int GetCurrentValue(){if (head == null){throw new InvalidOperationException("The linked list is empty.");}return LinkedList<T>.ConvertToInt(current.Data);}// 把<T>转换为int类型private static int ConvertToInt(T value){return checked((int)(object)value);}}

        使用类似的方法在LinkedList<T>类中添加其他方法。

3.创建一个LinkedList<int>类的实例

         创建一个LinkedList<int>类的实例,插入一些节点,并显示当前节点的值:

var linkedList = new LinkedList<int>();linkedList.Insert(5);
linkedList.Insert(10);
linkedList.Insert(15);Console.WriteLine(linkedList.GetCurrentValue()); // 输出:15

         这个示例假设类型T可以转换为int。在实际应用中,请确保T的类型符合您的需求。

4.完整的实例

namespace _131_3
{internal class Program{private static void Main(string[] args){ArgumentNullException.ThrowIfNull(args);var linkedList = new LinkedList<int>();linkedList.Insert(5);Console.WriteLine(linkedList.GetCurrentValue()); // 输出:5linkedList.Insert(10);Console.WriteLine(linkedList.GetCurrentValue()); // 输出:10linkedList.Insert(15);Console.WriteLine(linkedList.GetCurrentValue()); // 输出:15}/// <summary>/// 定义泛型节点类/// </summary>public class Node<T>(T data){private T data = data;public T Data { get => data; set => data = value; }public Node<T>? Next { get; set; } = null;}/// <summary>/// 定义泛型链表类LinkedList<T>/// </summary>public class LinkedList<T> where T : struct{private Node<T>? head;private Node<T>? current;public void Insert(T value){var newNode = new Node<T>(value);if (head == null){head = newNode;current = newNode;}else{Node<T> temp = head;while (temp.Next != null){temp = temp.Next;}temp.Next = newNode;current = newNode;}}// 定义GetCurrentValue()方法,获取当前节点public int GetCurrentValue(){if (head == null){throw new InvalidOperationException("The linked list is empty.");}return LinkedList<T>.ConvertToInt(current!.Data);}// 把<T>转换为int类型private static int ConvertToInt(T value){return checked((int)(object)value);}}}
}
//运行结果:
/*
5
10
15*/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/706941.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Maya笔记 设置工作目录

Maya会把素材场景等自动保存在工作目录里&#xff0c;我们可以自己定义工作目录 步骤1 创建workspace.mel文件 文件/设置项目 ——>选择一个文件夹&#xff0c;点击设置——>创建默认工作区 这一个后&#xff0c;可以在文件夹里看到.mel文件 步骤2 自动创建文件夹…

[java]23种设计模式之工厂模式

用女蜗造人阐述工厂模式 1.1 一个工厂模式 现在女娲要造人&#xff0c;她要造三种人&#xff1a;白种人、黄种人和黑种人。怎么造呢&#xff1f;她得有个能产生人类的工厂吧&#xff08;类似于八卦炉的东西&#xff09;&#xff0c;这个工厂得让她生产出不同的人种。每个人都有…

Python把excel内容保存为图片(非统计图而是纯原表格数据)

一、引入 excel2img 库&#xff0c;没有的话使用 pip install excel2img进行安装 二、采用如下方法进行图片生成 excel文件名为&#xff1a;111.xlsx excel表格里面的sheet名称列表为 [Sheet1, Sheet2] 最终保存为以sheet名称.png的图片 支持跨表格合并项 import excel2i…

Java 学习和实践笔记(23):继承(extends)的概念以及instanceof的使用

面向对象编有三大特征&#xff0c;分别是继承、封装和多态。本节重点讲继承的概念以及instanceof的使用。 继承是面向对象编程的三大特征之一。继承让我们更加容易实现类的扩展。实现代码的重用&#xff0c;不用再重新发明轮子(don’t reinvent wheels)。 继承有两个主要作用:…

Python网络协议和漏洞甄别网络安全之二

要点 Python套接字socket和HTTP网络编程&#xff0c;使用四种方式构建HTTP客户端&#xff0c;建立服务器和客户端&#xff0c;端口扫描服务器脚本应用方式&#xff1a;二分法搜索&#xff0c;socket应用&#xff0c;DNSPython使用交互文件系统服务器&#xff1a;FTP&#xff0…

当Web3叙事寒冬到来,游戏是否是冬日里的“一把火”?

出品&#xff5c;欧科云链研究院 作者&#xff5c;Jason Jiang 以太坊创始人Vitalik在2019年曾说&#xff1a;金融与游戏会是区块链最先落地的场景。 在DeFi金融创新驱动上个周期后&#xff0c;沉寂近两年的Web3游戏板块&#xff0c;如今似乎也在复苏。无论是频繁获得融资&a…

【MySQL】学习多表查询和笛卡尔积 - 副本

](https://img-blog.csdnimg.cn/21dd41dce63a4f2da07b9d879ad0120b.png#pic_center) ??个人主页: ??热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ??个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-N8PeTKG6uLu4bJuM {font-family:“trebuchet ms”,…

在CentOS上使用Docker搭建Halo博客并实现远程访问的详细指南

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;网络奇遇记、数据结构 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;前言一. Docker部署Halo1.1 检查Docker版本1.2 在Docker中部署Halo 二. Linux安装Cpol…

SpringBoot项目在进行部署打包的时候,打包成jar和war有何差异?

首先给大家来讲一个我们遇到的一个奇怪的问题: 我的一个springboot项目&#xff0c;用mvn install打包成jar&#xff0c;换一台有jdk的机器就直接可以用java -jar 项目名.jar的方式运行&#xff0c;没任何问题&#xff0c;为什么这里不需要tomcat也可以运行了&#xff1f; 然…

[CISCN 2019华东南]Web11

打开题目 看到xff就应该想到抓包 看回显也是127.0.0.1&#xff0c;我们盲猜是不是ssti模板注入 输入{{7*7}}显示49 可以看的出来flag在根目录下 输入{system(‘cat /flag’)} 得到flag 知识点&#xff1a; 漏洞确认 一般情况下输入{$smarty.version}就可以看到返回的smarty…

[数据集][目标检测]狗狗表情识别VOC+YOLO格式3971张4类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;3971 标注数量(xml文件个数)&#xff1a;3971 标注数量(txt文件个数)&#xff1a;3971 标注…

Maven编译报processing instruction can not have PITarget with reserveld xml name

在java项目中&#xff0c;平时我们会执行mvn clean package命令来编译我们的java项目&#xff0c;可是博主今天执行编译时突然报了 processing instruction can not have PITarget with reserveld xml name 这个错&#xff0c;网上也说法不一&#xff0c;但是绝大绝大部分是因…

原创 黑马程序员微信小程序学习总结9.API Promise化、全局数据共享(store)

目录 API Promise化基于回调函数的异步API的缺点什么是API Promise化使用步骤实现API Promise化步骤 结果&#xff08;用处&#xff09; 全局数据共享如何安装mobx相关的包实现全局共享使用方法如何将store中的成员绑定到组件中&#xff08;即在组件中使用store&#xff09; AP…

【深度学习】Pytorch教程(八):PyTorch数据结构:2、张量的数学运算(6):高维张量:乘法、卷积(conv2d~四维张量;conv3d~五维张量)

文章目录 一、前言二、实验环境三、PyTorch数据结构1、Tensor&#xff08;张量&#xff09;1. 维度&#xff08;Dimensions&#xff09;2. 数据类型&#xff08;Data Types&#xff09;3. GPU加速&#xff08;GPU Acceleration&#xff09; 2、张量的数学运算1. 向量运算2. 矩阵…

【论文复现】——一种新的鲁棒三维点云平面拟合方法

目录 一、算法原理1、论文概述2、参考文献二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的GPT爬虫。 一、算法原理 1、论文概述 针对三维点云中的异常值和粗差点对平面拟合精度产生的影响,文章提出一…

【C++航海王:追寻罗杰的编程之路】类与对象你学会了吗?(上)

目录 1 -> 面向过程与面向对象的初步认识 2 -> 类的引入 3 -> 类的定义 4 -> 类的访问限定符及封装 4.1 -> 访问限定符 4.2 -> 封装 5 -> 类的作用域 6 -> 类的实例化 7 -> 类对象模型 7.1 -> 如何计算类对象的大小 7.2 -> 类对象…

SpringCloud Eureka(注册中心)

一、spring cloud简介 spring cloud 为开发人员提供了快速构建分布式系统的一些工具&#xff0c;包括配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等。它运行环境简单&#xff0c;可以在开发人员的电脑上跑。另外说明spring cloud是基…

Leetcoder Day25| 回溯part05:子集+排列

491.递增子序列 给定一个整型数组, 你的任务是找到所有该数组的递增子序列&#xff0c;递增子序列的长度至少是2。 示例: 输入:[4, 7, 6, 7]输出: [[4, 6], [4, 7], [4, 6, 7], [6, 7], [7,7], [4,7,7]] 说明: 给定数组的长度不会超过15。数组中的整数范围是 [-100,100]。给定数…

小程序一键链接WIFI

1.小程序一键链接WIFI connectWifi: function() {var that this;//检测手机型号wx.getSystemInfo({success: function(res) {var system ;if (res.platform android) system parseInt(res.system.substr(8));if (res.platform ios) system parseInt(res.system.substr(4…

Unity脚本,串行端口的握手协议(流控制)

在Unity的SerialPort构造函数中&#xff0c;流控制并没有被直接包含。流控制&#xff0c;也被称为握手&#xff0c;是一种过程&#xff0c;它管理数据的传输速度&#xff0c;以防止接收方被发送方发送的数据量所淹没。 在.NET的SerialPort类中&#xff0c;流控制是通过Handshak…