private void InsertFirstNode(CircularLinkedListNode <T> node) { node.Next = node; node.Previous = node; head = node; _Count++; }
public void MoveHeadLeft(int steps) { steps %= _Count; for (; steps > 0; steps--) { head = First.Previous; } }
public void MoveHeadRight(int steps) { steps %= _Count; for (; steps > 0; steps--) { head = First.Next; } }
private void InsertBefore(CircularLinkedListNode <T> origin, CircularLinkedListNode <T> node) { node.Next = origin; node.Previous = origin.Previous; origin.Previous.Next = node; origin.Previous = node; _Count++; }
public CircularLinkedListNode <T> ElementAt(int index) { index %= _Count; CircularLinkedListNode <T> current = head; for (int _ = 0; _ < index; _++) { current = current.Next; } return(current); }
public IEnumerable <T> GetValues() { CircularLinkedListNode <T> current = head; do { yield return(current.Value); current = current.Next; } while (current != head); }
public IEnumerator <CircularLinkedListNode <T> > GetEnumerator() { CircularLinkedListNode <T> current = head; do { yield return(current); current = current.Next; } while (current != head); }
public T[] ToArray() { T[] arr = new T[_Count]; CircularLinkedListNode <T> current = head; for (int i = 0; i < arr.Length; i++) { arr[i] = current.Value; current = current.Next; } return(arr); }
public CircularLinkedListNode <T> AddLast(T value) { CircularLinkedListNode <T> result = new CircularLinkedListNode <T>(value); if (head == null) { InsertFirstNode(result); } else { InsertBefore(head, result); } return(result); }
public CircularLinkedListNode <T> FindElementByValue(T itemValue) { CircularLinkedListNode <T> current = head; do { if (current.Value.Equals(itemValue)) { return(current); } current = current.Next; } while (current != head); return(null); }
public void Remove(CircularLinkedListNode <T> node) { if (node.Next == node) { head = null; } else { node.Next.Previous = node.Previous; node.Previous.Next = node.Next; if (head == node) { head = node.Next; } } _Count--; }
public void AddAfter(CircularLinkedListNode <T> origin, T value) { CircularLinkedListNode <T> node = new CircularLinkedListNode <T>(value); InsertBefore(origin.Next, node); }
public void AddAfter(CircularLinkedListNode <T> origin, CircularLinkedListNode <T> node) { InsertBefore(origin.Next, node); }