簡體   English   中英

鏈表插入問題

[英]Linked List Insertion problems

我正在嘗試插入具有名稱和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 << head-> data-> getID(),它似乎輸出當前鳥的當前ID,而不是輸出頭部的ID(應該是最低ID)

謝謝,麻煩您了!

我看不到該函數將在哪里返回false 因此,我認為將函數聲明為具有返回類型bool毫無意義,因為它始終返回true

我已將函數聲明為具有返回類型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;
}

我認為Node具有以下定義

struct Node
{
    Bird *data;
    Node *next;
};

您可以替代聲明

Node *newnode = new Node { bird, current };

對於

Node *newnode = new Node;
newnode->data = bird;
newnode->next = current;

該功能對我來說很好。 我希望,頭是在插入功能之外更換的。 您應檢查插入的調用部分或任何其他修改標頭值的地方。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM