public void deleteAt(int index) { if (index < 0 || index > Size && Size != 0) { throw new InvalidOperationException(); } else if (index == 0) { if (First == null) { throw new InvalidOperationException(); } else { DLLNode <T> temp = First; if (First.Next != null) { First.Next.Previous = null; } First = First.Next; temp = null; Size--; } } else if (index == Size - 1) { if (Last == null) { throw new InvalidOperationException(); } else { DLLNode <T> temp = Last; if (Last.Previous != null) { Last.Previous.Next = null; } Last = Last.Previous; temp = null; Size--; } } else { int count = 0; Current = First; while (Current != null && count != index) { Current = Current.Next; count++; } Current.Previous.Next = Current.Next; Current.Next.Previous = Current.Previous; Size--; } }
public void insertAt(T newElement, int index) { if (index < 0 || index > Size && Size != 0) { throw new InvalidOperationException(); } else if (index == 0) { DLLNode <T> newNode = new DLLNode <T>(newElement); if (First == null) { First = Last = newNode; } else { newNode.Next = First; First = newNode; newNode.Next.Previous = First; } Size++; } else if (index == Size) { DLLNode <T> newNode = new DLLNode <T>(newElement); if (First == null) { First = Last = newNode; } else { Last.Next = newNode; newNode.Previous = Last; Last = newNode; } Size++; } else { int count = 0; Current = First; while (Current != null && count != index) { Current = Current.Next; count++; } DLLNode <T> newNode = new DLLNode <T>(newElement); Current.Previous.Next = newNode; newNode.Previous = Current.Previous; Current.Previous = newNode; newNode.Next = Current; Size++; } }
public void clear() { while (!isEmpty()) { DLLNode <T> temp = First; if (First.Next != null) { First.Next.Previous = null; } First = First.Next; temp = null; Size--; } }
public void display() { if (First == null) { Console.WriteLine("empty"); return; } Current = First; int count = 1; while (Current != null) { Console.WriteLine("Element {0}: {1}", count, Current.Value); count++; Current = Current.Next; } }
public bool contains(T value) { Current = First; int index = 0; while (Current != null && !Current.Value.Equals(value)) { Current = Current.Next; index++; } if (index != Size) { return(true); } else { return(false); } }
public int getIndex(T value) { Current = First; int index = 0; while (Current != null && !Current.Value.Equals(value)) { Current = Current.Next; index++; } if (index != Size) { return(index); } else { return(0); } }
public T getValue(int index) { Current = First; int count = 0; while (Current != null && count != index) { Current = Current.Next; count++; } if (Current != null) { return(Current.Value); } else { return(default(T)); } }
public DoublyLinkedList() { Size = 0; First = Current = Last = null; }