It will not show the string char array in non-reverse order (cde), but it does display the array in reverse order (edc). Could you please help with why it isn't displaying the cde?
I tried changing variable names, but I'm a new programmer so I don't really know yet what to do.
#include <iostream>
using namespace std;
// of linked list in reverse order
// Structure of a node
template<class T>
struct listrec2
{
T value; //corresponds to data
listrec2 *next; //points to next node
listrec2 *prev; //points to previous nod
};
template<class T>
void downwardSearch(listrec2<T> *head)
//traverse from start of linked list to end of linked list
//print out value of each node along way
{
char s[] = { 'c', 'd', 'e' };
// if you wanted to make it in the function listrec2<T> *tail;
listrec2<T> *current;
listrec2<T> *tail;
listrec2<T> value;
head = tail = new listrec2<T>; // make a new node
head->value = s[0];
tail = NULL;
head = NULL;
for (int i = 1; i < strlen(s); i++)
{
current = new listrec2<T>; //makes new node
current->value = s[i];
current->next = NULL;
current->prev = tail;
tail->next = current;
tail = current;
}
listrec2<T> *ptr;
ptr = head;
cout << "The array in non-reverse order: " << endl;
while (ptr != NULL)
{
cout << ptr->value;
ptr = ptr->next;
}
}
template<class T>
void upwardSearch(listrec2<T> *tail)
{
char s[] = { 'c', 'd', 'e' };
// if you wanted to make it in the function listrec2<T> *tail;
// listrec2<T> *temp;
listrec2<T> *current2;
listrec2<T> *tail2;
listrec2<T> *value;
listrec2<T> *head2;
head2 = tail = new listrec2<T>; // make a new node
head2->value = s[0];
tail2 = NULL;
head2 = NULL;
for (int i = 1; i < strlen(s); i++)
{
current2 = new listrec2<T>;
current2->value = s[i];
current2->next = NULL;
current2->prev = tail;
tail->next = current2;
tail = current2;
}
listrec2<T> *ptr2;
ptr2 = tail;
cout << "The array in reverse order or backwards: " << endl;
while (ptr2 != NULL)
{
cout << ptr2->value;
ptr2 = ptr2->prev;
}
cout << endl;
}
int main()
{
//missing info here
listrec2<char> *head;
listrec2<char> *tail;
upwardSearch(head);
downwardSearch(tail);
return 0;
}
The expected results are: the array before reversal: cde the array after reversa: edc.
Here is one way of doing it with a create_list, search_up, search_down, and destory_list functions. I try to use variable names that are more descriptive. I do not like listrec2
because it is very confusing. It makes me think of the second node, but that is not what it is. It is a node type.
Also, it is a good habbit to capitalize your types (e.g. Node). Then, you can use the lowercase version for the object (e.g. Node node;)
#include <iostream>
using namespace std;
// of linked list in reverse order
// Structure of a Node
template<class T>
struct Node {
T value; //corresponds to data
Node *next; //points to next Node
Node *prev; //points to previous nod
};
template<typename T>
void CreateList(Node<T> *&head, Node<T> *&tail, T value_array[], int array_size)
{
head = nullptr;
tail = nullptr;
for (int i = 0; i < array_size; i++) {
// Create new node and add node to the end of the list
Node<T> *node = new Node<T>();
node->next = nullptr;
node->prev = tail;
if (head == nullptr) {
head = tail = node;
} else {
tail->next = node;
tail = node;
}
node->value = value_array[i];
}
}
template<class T>
void downwardSearch(Node<T> *head)
//traverse from start of linked list to end of linked list
//print out value of each Node along way
{
Node<T> *ptr = head;
cout << "The array in forward order: " << endl;
while (ptr != nullptr) {
cout << ptr->value;
ptr = ptr->next;
}
}
template<class T>
void DestroyList(Node<T> *head)
{
Node<T> *ptr;
while (head != nullptr) {
ptr = head->next;
delete head;
head = ptr;
}
}
template<class T>
void upwardSearch(Node<T> *tail)
{
Node<T> *ptr = tail;
cout << "The array in reverse order or backwards: " << endl;
while (ptr != nullptr) {
cout << ptr->value;
ptr = ptr->prev;
}
cout << endl;
}
int main()
{
char s[] = {'c', 'd', 'e'};
Node<char> *head;
Node<char> *tail;
CreateList<char>(head, tail, s, 3);
upwardSearch(tail);
downwardSearch(head);
DestroyList(head);
head = tail = nullptr;
return 0;
}