Question 2. Linked Lists [9]
The table below shows a program and the output we would see if
we attempted to run it.
Identify why the segmentation fault occurs
and provide an appropriate fix. (Only a one-line change is needed.)
#include <iostream> using namespace std; class list { public: list(); // create an empty list ~list(); // delete all remaining nodes void insert(int v); // insert v at front of list void remove(); // remove/discard back list node void print(); // display list contents private: struct node { int value; node *next; } *Lptr; // Lptr tracks the front of the list }; int main() { list L; L.insert(1); L.insert(2); L.print(); L.remove(); L.print(); } void list::insert(int v) { node *n = new node(); if (n != NULL) { n->value = v; n->next = Lptr; Lptr = n; } } | list::list() { Lptr = NULL; } list::~list() { while (Lptr != NULL) remove(); } void list::print() { node *n = Lptr; cout << "List contents: "; while (n != NULL) { cout << n->value; n = n->next; if (n != NULL) cout << ", "; else cout << "." << endl; } } void list::remove() { if (Lptr == NULL) return; if (Lptr->next == NULL) { delete Lptr; Lptr = NULL; } node *n = Lptr; node *prev = NULL; while (n->next != NULL) { prev = n; n = n->next; } delete n; prev->next = NULL; } |
// resulting output List contents: 2, 1. List contents: 2. Segmentation fault |