链接列表插入问题

时间:2014-10-27 07:15:57

标签: c++ linked-list nodes

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

拜托,谢谢!

2 个答案:

答案 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)

该功能对我来说很好。 我希望,头部是插入功能之外的变化。 你应该检查插入的调用部分或修改头部值的任何其他地方。