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

 更新时间:2024年02月28日 09:25:16   作者:wenchm  
这篇文章主要为大家详细介绍了C#如何使用泛型方法设计实现一个单向链表,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下

以下是一个使用泛型节点类和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(head.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的类型符合您的需求。

到此这篇关于C#使用泛型方法设计实现单向链表详解的文章就介绍到这了,更多相关C#泛型实现单向链表内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C#实现DevExpress本地化实例详解

    C#实现DevExpress本地化实例详解

    这篇文章主要介绍了C#实现DevExpress本地化,以实例形式较为详细的分析了DevExpress本地化的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-08-08
  • C#多接口实现、重名成员、显式实现、接口继承+抽象类和接口区别说明

    C#多接口实现、重名成员、显式实现、接口继承+抽象类和接口区别说明

    这段SEO描述融合了“接口显式实现”、“接口冲突”、“接口继承”三个核心关键词,详细概括了文章关于Java接口相关知识点的讲解,包括显式实现规则、冲突接口处理方法、接口继承规则等内容,适合准备相关考试或项目开发的读者
    2026-06-06
  • C# Base64编码函数

    C# Base64编码函数

    Base64编码的思想是是采用64个基本的ASCII码字符对数据进行重新编码。它将需要编码的数据拆分成字节数组。
    2009-06-06
  • C#汉字转拼音实例(支持多音字)

    C#汉字转拼音实例(支持多音字)

    几年前就在网上看到过汉字转拼音的程序,大都就是按汉字的编码转换,单字对应的算法实现的。但是都有一个共同的缺点,不能支持多音字。本篇文章主要介绍了C#汉字转拼音实例(支持多音字),有兴趣的可以了解一下。
    2016-12-12
  • C#判断系统是32位还是64位的方法

    C#判断系统是32位还是64位的方法

    这篇文章主要介绍了C#判断系统是32位还是64位的方法,实例分析了两种常用的技巧供大家选择使用,非常具有实用价值,需要的朋友可以参考下
    2015-04-04
  • C# dataset存放多张表的实例

    C# dataset存放多张表的实例

    这篇文章主要介绍了C# dataset存放多张表的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • 详解WMI RPC 服务器不可用的解决方案

    详解WMI RPC 服务器不可用的解决方案

    这篇文章主要介绍了详解WMI RPC 服务器不可用的解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • C#中LINQ to DataSet操作及DataTable与LINQ相互转换

    C#中LINQ to DataSet操作及DataTable与LINQ相互转换

    这篇文章介绍了C#中LINQ to DataSet操作及DataTable与LINQ相互转换,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • C#简易人机对抗“石头剪刀布”游戏的实现

    C#简易人机对抗“石头剪刀布”游戏的实现

    本文主要介绍了C#简易人机对抗“石头剪刀布”游戏的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • C#正则表达式获取下拉菜单(select)的相关属性值

    C#正则表达式获取下拉菜单(select)的相关属性值

    这篇文章主要介绍了C#正则表达式获取下拉菜单(select)的相关属性值,比如可以获得name属性的值、value值、指定值,需要的朋友可以参考下
    2014-07-07

最新评论