簡體   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