Реализация связанного списка в C ++ - PullRequest
0 голосов
/ 08 ноября 2018

Этот код печатает только 30, что с этим не так?

Я следовал этому уроку https://www.codementor.io/codementorteam/a-comprehensive-guide-to-implementation-of-singly-linked-list-using-c_plus_plus-ondlm5azr

Понятия не имею, как на этой печати всего 30? Что-то не так с этим кодом?

#include <iostream>

using namespace std;

struct node {
    int data;
    node *next;
};

class LinkedList {
    private:
        node *head, *tail;

    public:
        LinkedList() {
            head = NULL;
            tail = NULL;
        }

        // For adding nodes
        void addNode(int value) {
            node *tmp = new node;
            tmp->data = value;
            tmp->next = NULL;

            if(head == tail) {
                head = tmp;
                tail = tmp;
                tmp = NULL;
            } else {
                tail->next = tmp;
                tail = tail->next;
            }
        }

        // For displaying nodes
        void display() {
            node *tmp = head;

            while(tmp != NULL) {
                cout << tmp->data << endl;
                tmp = tmp->next;
            }
        }
};

int main()
{
    LinkedList a;

    // For adding nodes
    a.addNode(10);
    a.addNode(20);
    a.addNode(30);

    // For displaying nodes
    a.display();

    return 0;
}

Ответы [ 2 ]

0 голосов
/ 08 ноября 2018

Я думаю, что ошибка в строке if (head == tail), если вы измените ее на if (head == NULL), она должна вывести 10 20 30. Однако, если вам интересно, почему if (head == tail) ) является причиной этой проблемы, потому что для каждой операции addNode голова и хвост равны, и, наконец, голова также собирается в 30!

0 голосов
/ 08 ноября 2018

if условие всегда возвращает истину:

if(head == tail) {

при первой вставке возвращает true, потому что head и tail равны NULL. При второй вставке это условие также возвращает true, потому что голова и хвост одинаковы, и так далее. Таким образом, вы не добавляете новые элементы, но всегда перезаписываете первый элемент.

Вы должны исправить это

 if (head == NULL)
...