Doubly Linked Worksheet
Implement the stubbed out function at the bottom of the DoublyLinkedList.h file.
Constructor:
template <class T>
DoublyLinkedList<T>::DoublyLinkedList() {
//Make dummy nodes for head/tail
head = new ListNode<T>();
tail = new ListNode<T>();
//Connect dummies into a list
head->next = tail;
tail->prev = head;
length = 0;
}
InsertAt(index, value):
template <class T>
void DoublyLinkedList<T>::insertAt(int index, T value) {
if(index > length)
throw out_of_range("Bad index in insertAt");
State A
//Make a new node to hold new item
ListNode<T>* newNode = new ListNode<T>(value);
//Make previousNode point to node that should end up right
before the new node
ListNode<T>* previousNode = head;
for(int i = 0; i < index; i++)
previousNode = previousNode->next;
State B
//Make newNode point to its two neighbors
newNode->prev = previousNode;
newNode->next = previousNode->next;
//Make its two neighhbors point to it
newNode->next->prev = newNode;
newNode->prev->next = newNode;
length++;
}
State C
RemoveAt(index):
template <class T>
void DoublyLinkedList<T>::removeAt(int index) {
if(index >= length)
throw out_of_range("Bad index in removeAt");
//Make currentNode point to one we want to get rid of
ListNode<T>* currentNode = head->next;
for(int i = 0; i < index; i++)
currentNode = currentNode->next;
//Make its neighbors point to each other, skipping currentNode
currentNode->next->prev = currentNode->prev;
currentNode->prev->next = currentNode->next;
//Safe to delete node
delete currentNode;
length--;
}
State A
State B
© Copyright 2026 Paperzz