c#泛型学习详解 创建线性链表


在C#中,泛型允许我们定义类、接口、方法时指定类型参数,这些类型参数在类、接口、方法被实例化时会被具体的类型所替换。使用泛型可以提高代码的重用性、类型安全和性能。

下面我将为你展示如何在C#中使用泛型来创建一个简单的线性链表(LinkedList)结构。这个链表将包含节点,每个节点存储一个泛型类型的值,并指向列表中的下一个节点。


using System;

// 定义链表节点
public class LinkedListNode<T>
{
    public T Value { get; set; }
    public LinkedListNode<T> Next { get; set; }

    public LinkedListNode(T value)
    {
        Value = value;
        Next = null;
    }

    public LinkedListNode(T value, LinkedListNode<T> next)
    {
        Value = value;
        Next = next;
    }
}

// 定义链表
public class LinkedList<T>
{
    public LinkedListNode<T> Head { get; private set; }

    public LinkedList()
    {
        Head = null;
    }

    // 在链表末尾添加节点
    public void Add(T value)
    {
        var newNode = new LinkedListNode<T>(value);
        if (Head == null)
        {
            Head = newNode;
        }
        else
        {
            var current = Head;
            while (current.Next != null)
            {
                current = current.Next;
            }
            current.Next = newNode;
        }
    }

    // 打印链表(为了演示,这里使用了简单的迭代方式)
    public void Print()
    {
        var current = Head;
        while (current != null)
        {
            Console.Write(current.Value + " -> ");
            current = current.Next;
        }
        Console.WriteLine("null");
    }
}

// 示例使用
class Program
{
    static void Main(string[] args)
    {
        var linkedList = new LinkedList<int>();
        linkedList.Add(1);
        linkedList.Add(2);
        linkedList.Add(3);

        linkedList.Print(); // 输出: 1 -> 2 -> 3 -> null
    }
}

上面的代码中,我们首先定义了一个泛型节点类`LinkedListNode`,它包含一个泛型类型的值`Value`和一个指向下一个节点的指针`Next`。然后,我们定义了一个泛型链表类`LinkedList`,它包含一个指向链表头部的指针`Head`。`LinkedList`类提供了一个`Add`方法用于在链表末尾添加新节点,以及一个`Print`方法用于打印链表中的所有元素。

请注意,这里为了简化示例,`Print`方法直接在控制台上输出了链表的内容。在实际应用中,你可能需要根据具体需求来实现更复杂的操作。