繁体   English   中英

在链表中按升序插入对象

[英]Inserting object in ascending order in 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

注意:我要插入的name参数是一个char *

您的代码具有条件:

head->name >= Nobj->name

这将比较两个char *类型的变量,该变量将通过字符串的位置而不是字符串的内容来比较两个对象。

而是使用std::stringstrcmp()

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

我猜这是另一个错误:

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

这是由以下内容启动的循环:

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

我期待您的代码将新对象与t2-> name()进行比较,试图找到插入新对象之前的位置。

我想我建议

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM