2014-10-27 164 views
0

我试图插入的对象(鸟),它保存的名称和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)

拜托,谢谢!

+0

1)你确定'next'被初始化为NULL吗?如果不是,你应该做'insNode-> next = head;'或'insNode-> next = NULL;'当插入一个空列表时。 2)逻辑看起来有点不一致:当新项目与第一个项目相等时,将其插入列表的前面,但是当它与其他一些数据相同时,可以跳过它们并插入组的末尾。 – CiaPan 2014-10-27 07:46:15

+0

你的函数总是返回true,对我来说这是一个问题。 – sop 2014-10-27 08:01:43

回答

2

我看不到函数返回的位置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

该功能对我来说工作正常。 我希望头部在插入功能之外改变。 你应该检查插入的调用部分或其他修改头部值的地方吗?