我正在尝试插入一个包含名称和ID号的对象(bird)我在将对象插入我的链接列表时遇到问题
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;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;
该函数对我来说运行良好。我希望,头部是改变插入功能之外的。是否检查插入的调用部分或修改头值的任何其他位置。