117.info
人生若只如初见

如何用C#构建双向链表

在C#中,要创建一个双向链表,首先需要定义一个表示链表节点的类,其中包含指向前一个和后一个节点的引用

public class Node
{
    public T Data { get; set; }
    public Node Previous { get; set; }
    public Node Next { get; set; }

    public Node(T data)
    {
        Data = https://www.yisu.com/ask/data;>
{
    private Node _head;
    private Node _tail;

    public DoublyLinkedList()
    {
        _head = null;
        _tail = null;
    }

    // 在链表末尾添加新节点
    public void Add(T data)
    {
        var newNode = new Node(data);

        if (_head == null)
        {
            _head = newNode;
            _tail = newNode;
        }
        else
        {
            newNode.Previous = _tail;
            _tail.Next = newNode;
            _tail = newNode;
        }
    }

    // 从链表中删除节点
    public bool Remove(T data)
    {
        var current = _head;

        while (current != null)
        {
            if (current.Data.Equals(data))
            {
                if (current.Previous != null)
                    current.Previous.Next = current.Next;
                else
                    _head = current.Next;

                if (current.Next != null)
                    current.Next.Previous = current.Previous;
                else
                    _tail = current.Previous;

                return true;
            }

            current = current.Next;
        }

        return false;
    }

    // 打印链表中的所有元素
    public void Print()
    {
        var current = _head;

        while (current != null)
        {
            Console.Write(current.Data + " ");
            current = current.Next;
        }

        Console.WriteLine();
    }
}

以下是如何使用这个双向链表类的示例:

class Program
{
    static void Main(string[] args)
    {
        var list = new DoublyLinkedList();

        list.Add(1);
        list.Add(2);
        list.Add(3);

        list.Print(); // 输出: 1 2 3

        list.Remove(2);
        list.Print(); // 输出: 1 3
    }
}

这个实现提供了基本的双向链表功能,包括添加、删除和打印链表中的元素。你可以根据需要扩展此实现,例如添加更多的遍历方法或者实现链表的其他操作。

未经允许不得转载 » 本文链接:https://www.117.info/ask/fecceAzsBAgJQAA.html

推荐文章

  • C# attributes如何实现代码生成

    C# attributes 是一种用于为元素添加元数据的特性。通过在属性中添加特定的标记,可以为类、方法、属性等添加额外的信息。在代码生成中,可以使用 attributes 来...

  • C#中attributes的参数传递方式

    在C#中,attributes的参数传递方式可以通过使用构造函数、命名参数或者属性来实现。 使用构造函数:可以在attribute类的构造函数中定义需要的参数,并在应用attr...

  • C# attributes在反射中的应用场景

    C# attributes 在反射中的应用场景包括: 标记类、方法、属性等的特性:Attributes 可以用来标记类、方法、属性等的特性,例如 [Serializable]、[Obsolete] 等,...

  • 如何在C#中使用attributes进行权限控制

    在C#中,可以使用attributes(属性)来实现权限控制。以下是一个简单的示例:
    using System; [AttributeUsage(AttributeTargets.Method, AllowMultiple = f...

  • C#随机数生成器的性能优化

    在C#中,随机数生成器的性能优化可以通过以下几个方面来实现: 使用System.Random类的线程安全版本:
    在多线程环境下,使用System.Random类可能会导致性能问...

  • C#随机数在游戏开发中的应用

    在游戏开发中,随机数是一个非常有用的工具,可以用于生成随机位置、速度、方向等 随机位置:在游戏中,你可能需要将对象(如敌人、道具等)放置在随机位置。使用...

  • C#中如何确保随机数的唯一性

    在C#中,要确保生成随机数的唯一性,可以使用以下方法: 使用HashSet存储已生成的随机数: using System;
    using System.Collections.Generic; class Progra...

  • C#随机数生成器的选择建议

    在C#中,有多种方法可以生成随机数 System.Random:这是最常用的随机数生成器,适用于大多数场景。它提供了基本的随机数生成功能,如生成整数、浮点数等。使用Sy...