簡體   English   中英

在C ++中打印(單個)鏈接列表

[英]printing a (singly) linked list in c++

好,首先我有我的節點結構

struct node {   
    string s;   
    node * next; 
};

而且它位於一個類中

    class strSet{
private:

    node * first;

而且我可以構造列表,並且已經檢查過它正在構造中(是),但是當我嘗試打印它時。“ Empty Set”被打印

這是我用來“打印”它的代碼:(我嘗試了許多聲明臨時指針的方法,但仍然沒有做)

node *temp = new node;
    temp = first;
    if (temp == NULL) cout << "Empty set" << endl;
    else {
    //  node * temp = new node;

        while (temp != NULL){
            cout << temp->s << endl;
            temp = temp->next;
        }
    }

任何幫助表示贊賞,謝謝

編輯:我有一個函數,使一個單例列表(這是一個分配),代碼是:

node *first = new node;
first->s = s;
cout << first->s << endl;
first->next = NULL;

第三行添加元素時將其打印出來

是的,我知道內存泄漏

node *temp = new node;
temp = first;

可以濃縮為-

node *temp = first ; // An unnecessary memory leak in earlier case.

除此之外,打印邏輯似乎還不錯。 您沒有顯示鏈接列表如何形成的重要部分。


node *first = new node;
first->s = s;
cout << first->s << endl;
first->next = NULL;

這根本不是鏈接列表。 您只是在創建類型為node*的實例,然后將s復制到該實例。

node *temp = new node;

該行是不必要的,並且會泄漏內存; 其余的打印例程是正確的,因此,如果“空集”是打印機,則該集為空

從您發布的少量代碼來看,它應該可以工作,所以我的猜測是列表的構造有問題。

現在,您的代碼中有些不連貫性-如前所述,對於temp而言,無用的“新節點”,但也有您的(temp == NULL); 該測試可以直接通過“ first”操作。 當然,請確保首先將strSet初始化為null。

然后只有您可以在while()之前和else之后創建temp。 這更合乎邏輯(雖然您在那兒沒有贏很多,但是您會獲得更高的可讀性)(並且更理想一些)。

暫無
暫無

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

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