阅读量:0
在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#中创建和优化数据结构。