ln.collections/ln.collections/LinkedList.cs

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;
}
}
}