双向环形链表
/// <summary>
/// 双向环形链表
/// </summary>
namespace AnnularList
{
/// <summary>
/// 泛型节点类
/// </summary>
/// <typeparam name="T"></typeparam>
public class Node<T>
{
/// <summary>
/// 数据
/// </summary>
private T item;
/// <summary>
/// 下一个节点
/// </summary>
private Node<T> next;
/// <summary>
/// 上一个节点
/// </summary>
private Node<T> last;
/// <summary>
/// 元素
/// </summary>
public T Item
{
get { return this.item; }
set { this.item = value; }
}
/// <summary>
/// 下一个节点
/// </summary>
public Node<T> Next
{
get { return this.next; }
set { this.next = value; }
}
/// <summary>
/// 上一个节点
/// </summary>
public Node<T> Last
{
get { return this.last; }
set { this.last = value; }
}
/// <summary>
/// 创建节点
/// </summary>
/// <param name="_item"></param>
public Node(T _item)
{
Item = _item;
Next = null;
}
/// <summary>
/// 创建节点
/// </summary>
/// <param name="_item">元素</param>
/// <param name="node">首节点</param>
public Node(T _item, Node<T> node)
{
Item = _item;
Next = node;
node.Last = this;
}
}
/// <summary>
/// 环形链表
/// </summary>
/// <typeparam name="T"></typeparam>
public class LinkList<T>
{
/// <summary>
/// 第一个节点
/// </summary>
private Node<T> firstNode;
/// <summary>
/// 最后一个节点
/// </summary>
private Node<T> lastNode;
/// <summary>
/// 链表的大小
/// </summary>
private int length;
/// <summary>
/// 当前的节点(添加新的节点之前的最后一个节点)
/// </summary>
private Node<T> currentNode;
/// <summary>
/// 第一个节点
/// </summary>
public Node<T> FirstNode
{
get { return this.firstNode; }
set { this.firstNode = value; }
}
/// <summary>
/// 最后一个节点
/// </summary>
public Node<T> LastNode
{
get { return this.lastNode; }
set { this.lastNode = value; }
}
/// <summary>
/// 链表长度
/// </summary>
public int Length
{
get { return this.length; }
set { this.length = value; }
}
/// <summary>
/// 给链表添加元素
/// </summary>
/// <param name="_item">元素(泛型)</param>
public void Add(T _item)
{
if (FirstNode == null)
{
Node<T> node1 = new Node<T>(_item);
FirstNode = node1;
LastNode = FirstNode;
Length += 1;
return;
}
Node<T> m = FirstNode;
while (m != LastNode)
{
m = m.Next;
}
Node<T> node = new Node<T>(_item, FirstNode);
LastNode = node;
m.Next = node;
node.Last = m;
Length += 1;
}
/// <summary>
/// 获取指定的节点
/// </summary>
/// <returns></returns>
public Node<T> GetAppointNode(T _item)
{
Node<T> node = this.firstNode;
if (node.Item.GetType() == _item.GetType())
{
for (int i = 0; i < this.Length; i++)
{
if (node.Item.ToString() == _item.ToString())
{
return node;
}
else
{
node = node.Next;
}
}
}
return null;
}
}
}