Бесконечный цикл при вставке элемента в связанный список - PullRequest
0 голосов
/ 08 мая 2020

Попытка вставить значение в связанный список, но оно вводит бесконечное l oop при передаче во второй раз. Уже час чешу затылок по этой проблеме. Это связано с проблемами размещения переменных или просто с алгоритмом в целом?

Edit 1: изменено NULL на nullptr, создан счетчик, который сообщает значение карака для каждого l oop

#include <iostream>
#include <stack>
#include <string>
using namespace std;
struct List {
    char karak;
    List* next = nullptr;
};

int main()
{
    List* start = nullptr, * end = nullptr, * list = new List(), * trav = new List();
    int no = 0;
    cout << "Enter Numbers : ";
    cin >> no;
    for (int i = 0; i < no; i++) {
        trav = start;
        cout << "Enter No. " << (i + 1) << " : ";
        cin >> list->karak;
        if (i == 0) {
            start = list;
            end = list;
        }
        else {
            for (; trav->next != nullptr; trav = trav->next) { // infinite loop
                cout << "\ntest\n";
            }
            trav->next = list;
            end = list;
        }
        cout << "\n\nList Address No. " << (i + 1) << " : " << start->next << "\n\n";
        cout << "\n\nStart : " << start->karak << "\nEnd : " << end->karak << "\n\n";
    }

}

1 Ответ

0 голосов
/ 08 мая 2020

Объект должен быть создан внутри l oop, чтобы список не превратился в круговой связанный список. Итак, я добавил list = new List (); внутри l oop, чтобы программа могла создавать объекты внутри l oop.

#include <iostream>
#include <stack>
#include <string>
using namespace std;
struct List {
    char karak;
    List* next = nullptr;
};

int main()
{
    List* start = nullptr, * end = nullptr, * list = new List(), * trav = new List();
    int no = 0;
    cout << "Enter Numbers : ";
    cin >> no;
    for (int i = 0; i < no; i++) {
        trav = start;
        list = new List();                      \\I added here
        cout << "Enter No. " << (i + 1) << " : ";
        cin >> list->karak;
        if (i == 0) {
            start = list;
            end = list;
        }
        else {
            for (; trav->next != nullptr; trav = trav->next) { 
                cout << "\ntest\n";
            }
            trav->next = list;
            end = list;
        }
        cout << "\n\nList Address No. " << (i + 1) << " : " << start->next << "\n\n";
        cout << "\n\nStart : " << start->karak << "\nEnd : " << end->karak << "\n\n";
    }

}
...