在C#中,雙向鏈表是一種常見的數據結構,它可以高效地在列表的任意位置插入或刪除元素
首先,我們需要創建一個表示鏈表節點的類:
public class ListNode<T>
{
public T Value;
public ListNode<T> Prev;
public ListNode<T> Next;
public ListNode(T value)
{
Value = value;
Prev = null;
Next = null;
}
}
接下來,我們創建一個雙向鏈表類,實現基本的操作方法,如添加、刪除和查找節點:
public class DoublyLinkedList<T>
{
private ListNode<T> _head;
private ListNode<T> _tail;
private int _count;
public DoublyLinkedList()
{
_head = null;
_tail = null;
_count = 0;
}
public void AddFirst(T value)
{
var newNode = new ListNode<T>(value);
if (_head == null)
{
_head = newNode;
_tail = newNode;
}
else
{
newNode.Next = _head;
_head.Prev = newNode;
_head = newNode;
}
_count++;
}
public void AddLast(T value)
{
var newNode = new ListNode<T>(value);
if (_tail == null)
{
_head = newNode;
_tail = newNode;
}
else
{
newNode.Prev = _tail;
_tail.Next = newNode;
_tail = newNode;
}
_count++;
}
public bool Remove(T value)
{
var node = Find(value);
if (node == null) return false;
if (node.Prev != null)
{
node.Prev.Next = node.Next;
}
else
{
_head = node.Next;
}
if (node.Next != null)
{
node.Next.Prev = node.Prev;
}
else
{
_tail = node.Prev;
}
_count--;
return true;
}
public ListNode<T> Find(T value)
{
var current = _head;
while (current != null)
{
if (current.Value.Equals(value)) return current;
current = current.Next;
}
return null;
}
public int Count => _count;
}
這個雙向鏈表類提供了基本的添加、刪除和查找功能。你可以根據需要對其進行擴展,例如實現更復雜的查找算法、支持索引訪問等。使用這個雙向鏈表類,你可以輕松地在C#中創建和優化數據結構。