所以我正在使用 mingwx64 編譯器和 vscode 編輯器,但顯示功能無法正常作業,但是當我嘗試以與 arr.display() 相同的邏輯在 main() 函式中顯示時,它可以正常作業。我嘗試在 onlinegdb 網站上運行相同的代碼,它按預期運行。是 gcc 錯誤還是我不知道的功能?
#include <iostream>
using namespace std;
class nodee
{
public:
int data;
nodee *next;
};
class ll
{
public:
nodee **head = NULL;
nodee **push(int no = 1)
{
nodee *node;
int n;
if (head != NULL)
{
node = *head;
while ((*node).next != NULL)
{
node = (*node).next;
}
while (no--)
{
nodee *new_node = new nodee();
cout << "Enter the element : ";
cin >> n;
(*node).next = new_node;
new_node->data = n;
new_node->next = NULL;
node = (*node).next;
}
}
else
{
nodee *first = new nodee();
head = &first;
node = *head;
cout << "Enter the element : ";
cin >> n;
first->data = n;
no--;
while (no--)
{
nodee *new_node = new nodee();
cout << "Enter the element : ";
cin >> n;
(*node).next = new_node;
new_node->data = n;
new_node->next = NULL;
node = (*node).next;
}
}
return head;
}
void display()
{
nodee *node = *head;
while (node->next != NULL)
{
cout << node->data<<endl;
node = node->next;
}
cout<<node->data<<endl;
}
};
int main()
{
ll arr;
arr.push(5);
arr.display();
return 0;
}
uj5u.com熱心網友回復:
錯誤是head = &first;,您正在使用指向區域變數的指標 as head,該指標在push函式之后無效。
解決方案是head只做一個nodee *,你不需要額外的*:
#include <iostream>
using namespace std;
class nodee
{
public:
int data;
nodee *next;
};
class ll
{
public:
nodee *head = NULL;
nodee *push(int no = 1)
{
nodee *node;
int n;
if (head != NULL)
{
node = head;
while ((*node).next != NULL)
{
node = (*node).next;
}
while (no--)
{
nodee *new_node = new nodee();
cout << "Enter the element : ";
cin >> n;
(*node).next = new_node;
new_node->data = n;
new_node->next = NULL;
node = (*node).next;
}
}
else
{
nodee *first = new nodee();
head = first;
node = head;
cout << "Enter the element : ";
cin >> n;
first->data = n;
no--;
while (no--)
{
nodee *new_node = new nodee();
cout << "Enter the element : ";
cin >> n;
(*node).next = new_node;
new_node->data = n;
new_node->next = NULL;
node = (*node).next;
}
}
return head;
}
void display()
{
nodee *node = head;
while (node->next != NULL)
{
cout << node->data<<endl;
node = node->next;
}
cout<<node->data<<endl;
}
};
int main()
{
ll arr;
arr.push(5);
arr.display();
return 0;
}
不作業:https : //godbolt.org/z/cr4rY4oKK
作業:https : //godbolt.org/z/88rd53jGP
uj5u.com熱心網友回復:
您對串列的宣告沒有任何意義。
而不是head像這樣宣告資料成員
nodee *head = NULL;
你宣稱它喜歡
nodee **head = NULL;
在函式內push第一次呼叫時,指標head由first退出函式后將不存在的區域變數的地址設定
nodee *first = new nodee();
head = &first;
所以指標head將無效。
該函式push還有一個令人困惑的邏輯。應該做的是在串列上推送一個整數值。所以它的引數應該指定將被推送的值而不是將被推送的節點數。
那就是函式應該宣告為
void push( int data );
請注意,如果您有一個單向鏈表,則應將新節點附加到串列的開頭。否則,您需要定義一個雙向單向鏈表,即您需要宣告一個指向頭節點和尾節點的指標。
對于 one-sede 鏈表,push只要資料成員 head 宣告為
nodee *head = NULL;
void push( int data )
{
nodee *mew_node = new nodee { data, head };
head = new_node;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/346452.html
上一篇:為什么要編譯?cout<"是";
