📅  最后修改于: 2023-12-03 14:56:19.616000             🧑  作者: Mango
本篇将介绍如何使用 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# 语言编写用于删除双向链表中的节点的程序。该程序实现了对链表的添加、删除和遍历等操作。程序员可以将此程序作为参考,编写更加复杂的程序。