[英]Linked List Insertion problems
我正在嘗試插入具有名稱和ID號的對象(鳥),但在將對象插入到鏈表中時遇到問題
bool List342::Insert(Bird *obj)
{
Node *insNode = new Node;
insNode->data = obj;
if (head == NULL)
{
head = insNode;
return true;
}
//cout << head->data->getID();
if ((insNode->data->getID()) <= (head->data->getID()))
{
insNode->next = head;
head = insNode;
return true;
}
Node *pNode = head;
while ((pNode->next != NULL) && ((pNode->next)->data->getID() <= insNode->data->getID()))
{
pNode = pNode->next;
}
insNode->next = pNode->next;
pNode->next = insNode;
return true;
}
它似乎沒有正確插入,我嘗試放入cout代碼以查看正在比較的數字,例如cout << head-> data-> getID(),它似乎輸出當前鳥的當前ID,而不是輸出頭部的ID(應該是最低ID)
謝謝,麻煩您了!
我看不到該函數將在哪里返回false
。 因此,我認為將函數聲明為具有返回類型bool
毫無意義,因為它始終返回true
。
我已將函數聲明為具有返回類型void
盡管您可以像以前一樣將函數聲明為具有返回類型bool
,但是在這種情況下,您需要添加最后一條返回true
語句。 可能最好將函數聲明為返回對列表本身的引用。
該功能可以通過以下方式定義
void List342::Insert( Bird *bird )
{
Node *prev = NULL;
Node *current = head;
while ( current != NULL && !( bird->getID() < current->data->getID() ) )
{
prev = current;
current = current->next;
}
Node *newnode = new Node { bird, current };
if ( prev != NULL ) prev->next = newnode;
else head = newnode;
}
我認為Node具有以下定義
struct Node
{
Bird *data;
Node *next;
};
您可以替代聲明
Node *newnode = new Node { bird, current };
對於
Node *newnode = new Node;
newnode->data = bird;
newnode->next = current;
該功能對我來說很好。 我希望,頭是在插入功能之外更換的。 您應檢查插入的調用部分或任何其他修改標頭值的地方。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.