public void AddBefore(CircularLinkedListNode <T> nodeAhead, T value) { if (nodeAhead == Head) { AddNodeToFront(value); return; } CircularLinkedListNode <T> runner = Head; CircularLinkedListNode <T> current = new CircularLinkedListNode <T>(value); for (int i = 0; i < Count; i++) { if (runner.next == null) { return; } if (runner.next == nodeAhead) { runner.next = current; current.next = nodeAhead; } runner = runner.next; } if (nodeAhead.next == null) { Tail.next = null; Tail = nodeAhead; Tail.next = Head; } Count++; }
public void AddAfter(CircularLinkedListNode <T> nodeBehind, T value) { CircularLinkedListNode <T> current = new CircularLinkedListNode <T>(value); if (nodeBehind == null) { return; } else { if (nodeBehind == Tail) { AddNodeToLast(value); return; } current.next = nodeBehind.next; nodeBehind.next = current; current.prev = nodeBehind; if (current.next == null) { Tail = current; Tail.next = null; Tail.next = Head; } } Count++; }
public void PrintList() { int i = 0; Console.WriteLine("-------------------------"); CircularLinkedListNode <T> runner = Head; while (i < Count) { Console.WriteLine(runner.data); runner = runner.next; i++; } Console.WriteLine("-------------------------"); }
public void AddNodeToLast(T value) { if (Head == null) { AddNodeToFront(value); } else { CircularLinkedListNode <T> current = new CircularLinkedListNode <T>(value); Tail.next = null; Tail.next = current; current.prev = Tail; Tail = current; Tail.next = Head; Head.prev = Tail; Count++; } }
public bool RemoveLast() { if (Head == null) { return(false); } else { if (Head == Tail) { Clear(); return(true); } else { Tail.next = null; Tail = Tail.prev; Tail.next = null; Tail.next = Head; } Count--; return(true); } }
public CircularLinkedListNode(T current) { data = current; next = null; prev = null; }
public void Clear() { Head = null; Tail = null; Count = 0; }