链表插入问题
问题描述:
我试图插入的对象(鸟),它保存的名称和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 < <头戴式>数据 - >的getID() ,它似乎输出电流鸟的电流id 而不是头部的ID(应该是最低的ID)
拜托,谢谢!
答
我看不到函数返回的位置false
。所以我认为将函数声明为返回类型bool
没有任何意义,因为它总是返回true
。
我已经宣布functtion具有返回类型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;
}
我想,节点有如下定义
struct Node
{
Bird *data;
Node *next;
};
您可以替代声明
Node *newnode = new Node { bird, current };
为
Node *newnode = new Node;
newnode->data = bird;
newnode->next = current;
答
该功能对我来说工作正常。 我希望头部在插入功能之外改变。 你应该检查插入的调用部分或其他修改头部值的地方吗?
1)你确定'next'被初始化为NULL吗?如果不是,你应该做'insNode-> next = head;'或'insNode-> next = NULL;'当插入一个空列表时。 2)逻辑看起来有点不一致:当新项目与第一个项目相等时,将其插入列表的前面,但是当它与其他一些数据相同时,可以跳过它们并插入组的末尾。 – CiaPan 2014-10-27 07:46:15
你的函数总是返回true,对我来说这是一个问题。 – sop 2014-10-27 08:01:43