Почему никакой вывод не отображается в окне вывода? - PullRequest
0 голосов
/ 13 января 2020

Я реализовал код для круглого связанного списка, но в окне вывода не отображается ничего, кроме следующего:

Время печати списка

И это сообщение, которое мой компилятор дает:

-------------- Сборка: отладка в Circular_Linked_List (компилятор: GNU G CC Compiler) --- ------------

Цель обновлена. Ничего не поделаешь (все элементы обновлены).

-------------- Run: отладка в Circular_Linked_List (компилятор: GNU G CC Compiler) ---------------

Проверка существования: C: \ Users \ hp \ Desktop \ CPP Программирование \ Circular_Linked_List \ bin \ Debug \ Circular_Linked_List.exe Выполнение: "C: \ Program Files (x86) \ CodeBlocks / cb_console_runner.exe" "C: \ Users \ hp \ Desktop \ CPP Программирование \ Circular_Linked_List \ bin \ Debug \ Circular_Linked_List.exe" (в C: \ Users \ hp \ Desktop \ CPP Programming \ Circular_Linked_List.)

Это следующий код, который я пытаюсь запустить и построить на коде :: blocks17.12

#include<iostream>
#include<bits/stdc++.h>
using namespace std;

class Node
{
public:
    int data;
    Node *next;
};
void push(Node* head,int data)
{
    Node *new_node = new Node();
    Node *temp = head;
    new_node->data = data;
    new_node->next = head;
    if(head!=NULL)
    {
        while(temp->next!=head)
        {
            temp = temp->next;
        }
        temp->next = new_node;
    }
    else{
        new_node->next = new_node;
    }
    head = new_node;
}
void printList(Node* head)
{
    Node *temp = head;
    if(head!=NULL){
        while(temp->next!=head)
    {
        cout<<temp->data<<" ";
        temp=temp->next;
    }
}
else{
    return;
}
}
int main()
{
    Node *head = NULL;

    push(head,12);
    push(head,14);
    push(head,15);
    push(head,16);

    cout<<"Time to print the List\n";

    printList(head);
    return 0;
}

1 Ответ

1 голос
/ 13 января 2020

Вам необходимо изменить функцию pu sh и функцию printlist следующим образом:

void push (Node * &head, int data)
{
  Node *new_node = new Node ();
  Node *temp = head;
  new_node->data = data;
  new_node->next = head;
  if (head != NULL)
    {
      while (temp->next != head)
    {
      temp = temp->next;
    }
      temp->next = new_node;
    }
  else
    new_node->next = new_node;
  head = new_node;
}

void printList (Node * head)
{
  Node *temp = head;
  if (head != NULL)
    {
      while (temp->next != head)
    {
      cout << temp->data << " " << std::endl;
      temp = temp->next;
    }
    cout << temp->data << " " << std::endl;
    }
  else
    return;
}

Поскольку в функции pu sh вы модифицируете сам указатель, и указатель передается по значению, он останется неизменным, как только функция вернется. Чтобы изменить указатель внутри функции, Вам необходимо передать его по ссылке. Вы можете найти полезную информацию о передаче указателя по ссылке здесь и здесь

Также в функции printlist есть узел, для которого temp-> next! = Head равно true, не будет напечатан. Так что вам нужно распечатать его отдельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...