Единый связанный список, практика внедрения - PullRequest
0 голосов
/ 23 сентября 2018

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

Вот что я сделал:

#include <iostream>
#include <memory>
#include <utility>

struct Node {
    int data;
    std::unique_ptr<Node> next = nullptr;

     Node(const int& x, std::unique_ptr<Node>&& p = nullptr)
        : data(x)
        , next(std::move(p)) {}

};
std::unique_ptr<Node> head;
Node* tail;

void print() {
    auto temp = head.get();
    while (temp) {
        std::cout << temp->data << " ";
        temp = temp->next.get();
    }
    std::cout << "\t";
}

void push_back(const int& theData) {
    std::unique_ptr<Node> newNode = std::make_unique<Node>(theData);

    if (!head) {
        newNode = std::move(head);
        tail = head.get();
    }
    else {
        tail->next = std::move(newNode);
        tail = tail->next.get();
    }
}

int main() {

    head = nullptr;
    tail = nullptr;
    push_back(2);
    push_back(4);
    push_back(6);
    print();


    std::cin.get();

}

Это должно напечатать 2 4 6, но ничего не печатает.Есть идеи почему?

1 Ответ

0 голосов
/ 23 сентября 2018

Вы не обновляете свой head в push_back().Вместо

if (!head) { newNode = std::move(head); ... }

вы должны делать

if (!head) {head = std::move(newNode); ... }
...