Я пишу программу, которая берет 8 введенных пользователем целых чисел и составляет из них связанный список. У меня программа распечатывает связанный список, затем я удаляю последний узел и распечатываю список в обратном порядке. По пути я тестировал программирование, чтобы убедиться, что каждая часть работает, и она работала до момента печати оригинального связанного списка.
Когда я закончил писать код для модификации и затем печатать деталь, я столкнулся с проблемой - программа не выдаст ничего после распечатки исходного списка. Так, например, если я введу 1,2,3,4,5,6,7,8, будет выведено:
1
2
3
4
5
6
7
8
и это все. Я пытался поставить cout << "testing"; в разных точках, чтобы увидеть, где мой код перестает выводить, а последняя точка, где он успешно выводится, находится прямо перед циклом while. </p>
Я не уверен, почему цикл while приведет к тому, что программа прекратит выводить что-либо, даже произвольное выражение cout, которое не имеет ничего общего с самим циклом while, поэтому я решил спросить здесь. Я использую Visual Studio 2017, если это поможет. Спасибо за любую помощь!
#include <iostream>
using namespace std;
void getdata(int & info); //function that assigns a user inputted value to each node
const int nil = 0;
class node_type // declaration of class
{
public:
int info;
node_type *next;
};
int main()
{
node_type *first, *p, *q, *r, *newnode;
first = new node_type;
newnode = new node_type;
int info;
getdata(info); //first node
(*first).info = info;
(*first).next = nil;
getdata(info); //second node
(*newnode).info = info;
(*first).next = newnode;
(*newnode).next = nil;
p = newnode;
for (int i = 2; i < 8; i++) //nodes 3-8
{
newnode = new node_type;
getdata(info);
(*newnode).info = info;
(*p).next = newnode;
p = newnode;
(*newnode).next = nil;
}
q = first;
while (q != nil) // printing linked list
{
cout << (*q).info << "\n";
q = (*q).next;
}
//deletes last node then reverses list
p = first;
q = (*p).next;
r = (*q).next;
if (first == nil) //if list is empty
cout << "Empty list";
else if ((*first).next == nil) //if list has one node
first = nil;
else if (r == nil) //if list has two nodes
q = nil;
else //general case
{
(*first).next = nil; //last line where when i put a cout << ""; it prints in the output window
while ((*r).next != nil)
{
(*q).next = p;
(*r).next = q;
p = q;
q = r;
r = (*r).next;
}
(*q).next = p;
first = q;
}
q = first;
while (q != nil) // printing newly modified list.
{
cout << (*q).info << "\n";
q = (*q).next;
}
return 0;
}
void getdata(int & info)
{
cout << "Enter number: \n";
cin >> info;
}