在C#中,要创建一个双向链表,首先需要定义一个表示链表节点的类,其中包含指向前一个和后一个节点的引用
public class Node<T>
{
public T Data { get; set; }
public Node<T> Previous { get; set; }
public Node<T> Next { get; set; }
public Node(T data)
{
Data = data;
Previous = null;
Next = null;
}
}
public class DoublyLinkedList<T>
{
private Node<T> _head;
private Node<T> _tail;
public DoublyLinkedList()
{
_head = null;
_tail = null;
}
// 在链表末尾添加新节点
public void Add(T data)
{
var newNode = new Node<T>(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<int>();
list.Add(1);
list.Add(2);
list.Add(3);
list.Print(); // 输出: 1 2 3
list.Remove(2);
list.Print(); // 输出: 1 3
}
}
这个实现提供了基本的双向链表功能,包括添加、删除和打印链表中的元素。你可以根据需要扩展此实现,例如添加更多的遍历方法或者实现链表的其他操作。