正如標題所說,我試圖在鏈表的結尾插入節點,但是C 程式一直崩潰
。class SymbolTable
{
struct Node {
{
字串id。
int num;
string str;
Node *next;
};
public:
SymbolTable() {}.
void insert(string id);
private:
Node head = { "head", -99, "", nullptr};
};
void SymbolTable::insert(string id)
{
Node *traverser = &(this->head)。
while (traverser != nullptr) { traverser = traverser-> next; }
Node *newNode = new Node() 。
newNode->id = id;
newNode->next = nullptr;
traverser->next = newNode; /-> Crashing。
}
我沒有看到任何問題。
答案:
traverser != nullptr 應該是 traverser->Next != nullptr
uj5u.com熱心網友回復:
我確實發現了一些問題,首先在類的定義中,你宣告函式 insert 為:
void insert(string id,string type)。
然而,當你在它之外宣告一個函式時,你跳過了第2個引數:
void SymbolTable::insert(string id)。
我不明白這段代碼怎么會被編譯。 我還修復了演算法本身:
void SymbolTable::insert( string id)
{
Node* traverser = &(this->head) 。
while (traverser->next != nullptr) //used to be (traverse !=nullptr)
{
traverser = traverser->接下來。
}
Node* newNode = new Node();
newNode->id = id;
newNode->next = nullptr;
traverser->next = newNode。
}
問題是你在檢查traverse是否為空,而不是traverser的next是否為空。因此,你所指的traverser是一個空指標。經過這個小小的修正,代碼在插入后編譯得很好。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/315431.html
標籤:
上一篇:按id分組并根據日期計算銷售變化
