45 lines
878 B
C#
45 lines
878 B
C#
namespace ln.collections
|
|
{
|
|
/**
|
|
* A backend Implementation of Double-Linked-List
|
|
**/
|
|
public class LinkedList<T>
|
|
{
|
|
public LinkedListItem<T> FirstItem => (head.Next != head) ? head.Next : null;
|
|
public LinkedListItem<T> LastItem => (head.Previous != head) ? head.Previous : null;
|
|
|
|
public LinkedListItem<T> Head => head;
|
|
|
|
LinkedListItem<T> head = new LinkedListItem<T>();
|
|
|
|
public LinkedList()
|
|
{
|
|
}
|
|
|
|
public void Clear()
|
|
{
|
|
head = new LinkedListItem<T>();
|
|
}
|
|
|
|
public void Add(LinkedListItem<T> item)
|
|
{
|
|
if (item.Previous != item)
|
|
Remove(item);
|
|
|
|
item.Next = head;
|
|
item.Previous = head.Previous;
|
|
item.Previous.Next = item;
|
|
item.Next.Previous = item;
|
|
}
|
|
|
|
public void Remove(LinkedListItem<T> item)
|
|
{
|
|
item.Previous.Next = item.Next;
|
|
item.Next.Previous = item.Previous;
|
|
item.Next = item;
|
|
item.Previous = item;
|
|
}
|
|
|
|
}
|
|
}
|