在链接列表中按升序插入对象

时间:2015-07-03 22:26:34

标签: c++ linked-list

我尝试做的是使用类构造函数char *中的第一个参数按升序将对象插入到链表中。我目前的代码没有显示任何错误,但订单不对。

到目前为止,我在下面有这段代码

void list::insert(Obj* NObj)
{
    if (head == NULL)
        head = NObj;
    else if (strcmp(NObj->name, head->name) < 0 ))
    {
        NObj->next = head;
        head = NObj;
    }
    else
    {
        Obj * t1 = head;
        Obj * t2 = t1->next;
        while ((t2 != NULL) && strcmp(NObj->name, head->name) < 0 )
        {
            t1 = t2;
            t2 = t2->next;
        }
        NObj->next = t2;
        t1->next = NObj;
    }
}

使用以下对象插入时

Obj("Brit", 6));
Obj("Germ", 2));
Obj("Cana", 7));
Obj("Zimb", 9));
Obj("Jama", 1));

我从我的打印功能

获得以下内容
 Jama
 Germ
 Zimb
 Cana
 Brit

而不是

 Brit
 Cana
 Germ
 Jama
 Zimb

注意: 插入的名称参数I是char *

2 个答案:

答案 0 :(得分:3)

您的代码具有条件:

head->name >= Nobj->name

这比较了char *类型的两个变量,它们将两个对象按字符串的位置进行比较,而不是字符串的内容。

相反,请使用std::stringstrcmp()

我还担心您在name构造函数中没有正确获取Obj的所有权,但您没有显示任何代码......

答案 1 :(得分:0)

我猜这个句子会出现另一个错误:

strcmp (NObj->name, head->name) 

在循环中开始:

while ((t2 != NULL) && strcmp(NObj->name, head->name) < 0 )
                                                ^^^^  ^^^  

我期待您的代码将新对象与t2-&gt; name()进行比较,尝试找到插入新对象的位置。

我认为我在暗示

while ((t2 != NULL) && strcmp(NObj->name, head->t2) < 0 )