Member 13903155 Ответов: 1

Почему C++ действует иначе, чем отладка?


Я имплементировал LinkedList в c++.

Я ожидал этого. :

List is not empty!!
4	


Но результат был :

List is not empty!!
5	


и забавно, что когда я отлаживаю и так "перешагиваю" снова и снова, я получаю ожидаемый результат. Есть ли кто-нибудь, кто говорит мне, что я что-то упускаю?



#include <iostream>
using namespace std;

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

class LinkedList {
    node *head;
    node *tail;
    
public:
    LinkedList(){
        head = nullptr;
        tail = nullptr;
    };
    
    void createNode(int value);
    void display();
};

void LinkedList::createNode(int value){
    node *temp = new node;
    temp->data = value;
    temp->next = nullptr;
    
    if(head == nullptr){
        head = temp;
        delete temp;
        temp = nullptr;
    } else {
        cout << "List is not empty!!" << endl;
    }
};

void LinkedList::display() {
    node *displayNode = new node;
    displayNode = head;
    while(displayNode != nullptr)
    {
        cout<<displayNode->data<<"\t";
        displayNode=displayNode->next;
    }
}

int main(){
    LinkedList *list1 = new LinkedList();
    list1->createNode(4);
    list1->createNode(5);
    
    list1->display();
};


Что я уже пробовал:

Я пробовал компилировать и отлаживать.

1 Ответов

Рейтинг:
2

Mohibur Rashid

Вы еще не закончили кодирование. Технически, если вы закончили все, что вы сделали, без ошибок, ваш результат будет иметь

List is not empty!!
4


Давайте сосредоточимся на вашем createNode функция
void LinkedList::createNode(int value){
    node *temp = new node;
    temp->data = value;
    temp->next = nullptr;
    
    if(head == nullptr){
        head = temp;
        delete temp; // if you delete this head variable become invalid. remove this
        temp = nullptr;
    } else {
        // you have not implement what would happen if the list is not empty.
        cout << "List is not empty!!" << endl;
    }
};


CPallini

5.

Mohibur Rashid

Спасибо!