public void Enqueue(T item) { if (Count == 0) { list.AddFirst(item); Count++; return; } GenericLinkedNode <T> currentNode = list.First; int index = 0; while (index <= Count) { if (item.CompareTo(currentNode.Value) < 0) { list.AddBefore(currentNode, item); Count++; return; } index++; currentNode = currentNode.NextNode; } list.AddLast(item); Count++; }
void AddTheFirstNode(T value) { GenericLinkedNode <T> node = new GenericLinkedNode <T>(value); First = node; Last = node; node.NextNode = node; node.PreviousNode = node; Count++; }
public IEnumerator <T> GetEnumerator() { GenericLinkedNode <T> currentNode = First; for (int i = 0; i < Count; i++) { yield return(currentNode.Value); currentNode = currentNode.NextNode; } }
void PrintList(int i, GenericLinkedNode <T> node) { if (i == Count - 1) { return; } else { Console.WriteLine(node.Value); PrintList(i += 1, node.NextNode); } }
public void AddBefore(GenericLinkedNode <T> node, T value) { GenericLinkedNode <T> newNode = new GenericLinkedNode <T>(value); newNode.NextNode = node; newNode.PreviousNode = node.PreviousNode; node.PreviousNode = newNode; if (node == First) { First = newNode; } Count++; }
public void AddLast(T value) { if (First == null) { AddTheFirstNode(value); } else { GenericLinkedNode <T> node = new GenericLinkedNode <T>(value); node.PreviousNode = Last; node.NextNode = Last.NextNode; Last.NextNode = node; Last = node; Count++; } }
public void AddAfter(GenericLinkedNode <T> node, T value) { GenericLinkedNode <T> newNode = new GenericLinkedNode <T>(value); newNode.PreviousNode = node; newNode.NextNode = node.NextNode; node.NextNode = newNode; node.PreviousNode = newNode; if (Count == 1) { Last = newNode; } else if (node == Last) { Last = newNode; } Count++; }
public GenericLinkedNode <T> Find(T value) { GenericLinkedNode <T> currentNode = First; int index = 0; while (index < Count) { if (value.Equals(currentNode.Value)) { return(currentNode); } else { index++; currentNode = currentNode.NextNode; } } return(null); }
public bool Contains(T value) { GenericLinkedNode <T> currentNode = First; int index = 0; while (index < Count) { if (value.Equals(currentNode.Value)) { return(true); } else { index++; currentNode = currentNode.NextNode; } } return(false); }
public void RemoveFirst() { if (Count == 0) { return; } if (Count == 1) { First = null; Last = null; Count--; } else { GenericLinkedNode <T> temp = First.NextNode; temp.PreviousNode = Last; Last.NextNode = temp; First = temp; Count--; } }
public void Clear() { Count = 0; First = null; Last = null; }
public GenericLinkedNode(T value, GenericLinkedNode <T> nextValue, GenericLinkedNode <T> previousValue) { this.Value = value; this.NextNode = nextValue; this.PreviousNode = previousValue; }