在链表中按升序插入对象
Inserting object in ascending order in Linked List
我想做的是使用 class 构造函数中的第一个参数 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
注意:
我插入的名称参数是一个 char*
您的代码有条件:
head->name >= Nobj->name
这会比较两个 char *
类型的变量,它通过字符串的位置而不是字符串的内容来比较两个对象。
而是使用 std::string
或 strcmp()
。
我还担心您没有在 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 )
我想做的是使用 class 构造函数中的第一个参数 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
注意: 我插入的名称参数是一个 char*
您的代码有条件:
head->name >= Nobj->name
这会比较两个 char *
类型的变量,它通过字符串的位置而不是字符串的内容来比较两个对象。
而是使用 std::string
或 strcmp()
。
我还担心您没有在 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 )