📜  用于删除双向链表中节点的 C# 程序(1)

📅  最后修改于: 2023-12-03 14:56:19.616000             🧑  作者: Mango

用于删除双向链表中节点的 C# 程序

本篇将介绍如何使用 C# 语言编写用于删除双向链表中节点的程序。双向链表是一种数据结构,每个节点除了包含自身的数据外,还包含指向前驱和后继的指针。在双向链表中删除一个节点需要做到以下几点:

  • 找到要删除的节点
  • 将该节点的前驱节点的后继指针指向该节点的后继节点
  • 将该节点的后继节点的前驱指针指向该节点的前驱节点
  • 释放该节点的内存

本文将提供一个通过输入节点值进行删除的示例程序。

示例程序
using System;

class Node
{
    public int data;
    public Node next;
    public Node prev;

    public Node(int d)
    {
        data = d;
        next = null;
        prev = null;
    }
}

class LinkedList
{
    private Node head;

    public LinkedList()
    {
        head = null;
    }

    public void AddNode(int data)
    {
        Node node = new Node(data);
        if (head == null)
        {
            head = node;
            return;
        }

        Node curr = head;
        while (curr.next != null)
        {
            curr = curr.next;
        }

        curr.next = node;
        node.prev = curr;
    }

    public void RemoveNode(int data)
    {
        Node curr = head;

        while (curr != null)
        {
            if (curr.data == data)
            {
                if (curr.prev != null)
                {
                    curr.prev.next = curr.next;
                }
                else
                {
                    head = curr.next;
                }

                if (curr.next != null)
                {
                    curr.next.prev = curr.prev;
                }

                curr = null;
                return;
            }

            curr = curr.next;
        }
    }

    public void Display()
    {
        Node curr = head;
        while (curr != null)
        {
            Console.Write(curr.data + " -> ");
            curr = curr.next;
        }

        Console.WriteLine();
    }
}

class Program
{
    static void Main(string[] args)
    {
        LinkedList list = new LinkedList();
        list.AddNode(1);
        list.AddNode(2);
        list.AddNode(3);
        list.AddNode(4);

        Console.WriteLine("Original List:");
        list.Display();

        list.RemoveNode(2);

        Console.WriteLine("List after removing a node with value 2:");
        list.Display();
    }
}
代码解读

代码中首先定义了 Node 类和 LinkedList 类。 Node 类表示链表中的一个节点,包含了该节点的数据和指向前驱和后继节点的指针。LinkedList 类则表示整个链表,包含了对节点的添加、删除以及链表的遍历输出等操作。

LinkedList 类中提供了 AddNode 方法,用于在链表尾部添加新节点。同时还有 RemoveNode 方法,用于删除指定值的节点。在删除节点时,程序会遍历整个链表查找指定值的节点,找到后再将该节点的前驱节点的后继指针指向该节点的后继节点,并将该节点的后继节点的前驱指针指向该节点的前驱节点。最后释放该节点的内存。

Program 类中则是具体的使用示例。在 Main 方法中创建一个空的链表,然后向其中添加四个节点,并通过 Display 方法输出整个链表。接着调用 RemoveNode 方法,删除链表中的值为 2 的节点,并再次遍历输出整个链表。

总结

本文介绍了如何使用 C# 语言编写用于删除双向链表中的节点的程序。该程序实现了对链表的添加、删除和遍历等操作。程序员可以将此程序作为参考,编写更加复杂的程序。