我正在尝试插入一个包含名称和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&lt;&lt;头戴式&GT; DATA-&GT;的getID() 它似乎输出当前鸟的当前id 而不是头部的id(应该是最低的ID)
拜托,谢谢!
答案 0 :(得分:2)
我看不到函数返回false
的位置。所以我认为将函数声明为返回类型bool
是没有任何意义的,因为它总是返回true
。
我已将函数声明为返回类型void
,尽管您可以像以前一样将函数声明为返回类型bool
,但在这种情况下,您需要添加将返回{{1 }}。
也许将函数声明为返回对列表本身的引用会更好。
可以通过以下方式定义该功能
true
我认为Node具有以下定义
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;
}
您可以替换声明
struct Node
{
Bird *data;
Node *next;
};
的
Node *newnode = new Node { bird, current };
答案 1 :(得分:1)
该功能对我来说很好。 我希望,头部是插入功能之外的变化。 你应该检查插入的调用部分或修改头部值的任何其他地方。