链表插入问题



我正在尝试插入一个包含名称和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;

该函数对我来说运行良好。我希望,头部是改变插入功能之外的。是否检查插入的调用部分或修改头值的任何其他位置。

相关内容

  • 没有找到相关文章

最新更新