Двусвязный список неправильно печатает значения - PullRequest
0 голосов
/ 07 октября 2019

Когда я вызываю методы для печати данных, хранящихся в узлах моего двусвязного списка, ничего не печатается, кроме пустых строк и нулей

#include <iostream>
#include <string>
using namespace std;

struct node {
    int weight;
    string name;
    node *nextname, *nextweight;
};
node *namehead = NULL, *weighthead = NULL;

bool isEmpty()
{
    if (namehead == NULL && weighthead == NULL)
        return true;
    else
        return false;
}

void addperson(int w, string n)
{
    node* newNode = new node;
    node *prev, *curr = newNode;
    if (isEmpty()) {
        namehead = newNode;
        weighthead = newNode;
    }
    else {
        curr = prev = namehead;
        if (curr->name > n) {
            namehead = newNode;
            newNode->nextname = curr;
        }
        else {
            do {
                if (curr->name <= n) {
                    prev = curr;
                    curr = curr->nextname;
                }
                else
                    break;
            } while (curr != NULL);
            prev->nextname = newNode;
            newNode->nextname = curr;
        }
        curr = prev = weighthead;
        if (curr->weight > w) {
            weighthead = newNode;
            newNode->nextweight = curr;
        }
        else {
            do {
                if (curr->weight <= w) {
                    prev = curr;
                    curr = curr->nextweight;
                }
                else
                    break;
            } while (curr != NULL);
            prev->nextweight = newNode;
            newNode->nextweight = curr;
        }
    }
}

void printname()
{
    node* curr = namehead;
    do {
        cout << curr->name << " - " << curr->weight << endl;
        curr = curr->nextname;
    } while (curr != NULL);
    cout << endl;
}

void printweight()
{
    node* curr = weighthead;
    do {
        cout << curr->name << " - " << curr->weight << endl;
        curr = curr->nextweight;
    } while (curr != NULL);
    cout << endl;
}

int main()
{
    int w = 0;
    string n;
    for (int i = 0; i < 15; i++) {
        cout << "Enter weight: ";
        cin >> w;
        if (w == -1)
            break;
        cout << "Enter name: ";
        cin >> n;
        addperson(w, n);
    }
    printname();
    printweight();
    return 0;
}

Ожидаемый вывод (По имени):

Джон - 220

Стивен - 190

Тайлер - 150

Ожидаемая производительность (по весу):

Тайлер - 150

Стивен - 190

Джон - 220

ТЕКУЩИЙ ВЫХОД (в обе стороны):

"" - 0

"" - 0

"" - 0

РЕДАКТИРОВАТЬ Принимая предложения в комментариях о фактическом присвоении значений w (weight) и n (name) временному узлу в методе add,проблема была исправленаСпасибо за помощь.

curr->weight=w;
curr->name=n;

1 Ответ

1 голос
/ 07 октября 2019

Назначьте переданные значения в элементы weight и name в узел-заполнитель в методе add:

curr->weight=w;
curr->name=n;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...