void Insert(int a[], int val, int & numElts) { int k = numElts - 1; while (k >= 0 && a[k] > val){ a[k+1] = a[k]; k--; } a[k+1] = val; numElts++; } Node * Copy(Node * list) // postcondition: return a copy of list { Node * first = NULL; // works when list is NULL // make copy of first node if (list != NULL){ first = new Node; first->info = list->info; first->next = NULL; list = list->next; // move to next node } // copy remaining nodes Node * tail = first; while (list != NULL){ tail->next = new Node; // create a new node tail = tail->next; tail->info = list->info; tail->next = NULL; list = list->next; } return first; } void ReverseArray(int a[], int numElts) { int k; for(k=0; k < numElts/2; k++){ Swap(a[k],a[numElts-k-1]); } } void ReverseVertical(int m[][6], int numRows, int col) { int k; for(k=0; k < numRows/2; k++){ Sap(m[k][col], m[numRows-k-1][col]); } } void ReverseMatrix(int m[][6], int numRows) { int k; for(k=0; k < numRows; k++){ ReverseArray(m[k],6); } for(k=0; k < 6; k++){ ReverseVertical(m,numRows,k); } }