using System.Collections.Generic;
public ListNode PreviousNode
public ListNode(T element)
public ListNode(T element, ListNode prevNode)
prevNode.NextNode = this;
this.PreviousNode = prevNode;
public ListNode(ListNode nextNode, T element)
nextNode.PreviousNode = this;
this.NextNode = nextNode;
public void AddLast(T item)
this.head = new ListNode(item);
ListNode newNode = new ListNode(item, this.tail);
public void AddFirst(T item)
this.head = new ListNode(item);
ListNode newNode = new ListNode(this.head, item);
ListNode removedNode = this.head;
throw new ArgumentNullException("Deque is empty");
this.head = this.head.NextNode;
return removedNode.Element;
ListNode removedNode = this.tail;
throw new ArgumentNullException("Deque is empty");
this.tail = this.tail.PreviousNode;
return removedNode.Element;
public class DoublyLinkedListTest
public static void Main()
Deque<string> shoppingList = new Deque<string>();
shoppingList.AddFirst("Milk");
shoppingList.AddFirst("Honey");
shoppingList.AddFirst("Olives");
shoppingList.AddFirst("Water");
shoppingList.AddLast("Fruits");
shoppingList.AddLast("Juice");
Console.WriteLine(shoppingList.RemoveFirst());
Console.WriteLine(shoppingList.RemoveLast());
shoppingList.AddLast("Beer");
shoppingList.RemoveFirst();