2011-03-16 120 views
1

OK(單)鏈表,首先我有我的節點結構打印在C++

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

而且它位於一類

class strSet{ 
private: 

    node * first; 

內我可以構建列表,而且我已經做了檢查,看看它正在建設(這是),但是當我嘗試和打印它..「空集」打印

這是我的代碼「打印」它:(我嘗試了許多變化聲明一個臨時指針,但仍然沒有)

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; 

第三行當我添加它時打印出元素

而且我知道存在內存泄漏

+2

你怎麼知道你有什麼? – 2011-03-16 11:29:36

+0

向我們顯示插入節點的代碼。 – codaddict 2011-03-16 11:31:22

+0

你最後一段代碼運行在哪裏?在strSet的類成員裏面?如果你不先初始化任何東西,我會期待你收到的結果... – g19fanatic 2011-03-16 11:32:23

回答

0
比打印邏輯似乎罰款

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複製到該實例即可。

+0

這是我嘗試的事情之一,我張貼我的代碼的最新版本,但我會去回到那個,謝謝 – ABlok 2011-03-16 11:35:39

+0

我想寫測試目的的輸出函數,然後才能創建一個n大小的鏈表。它不應該仍然打印價值?該函數應該創建一個帶有一個元素的「鏈接列表」 – ABlok 2011-03-16 11:43:35

+0

@ABlok - 即使打印鏈接列表元素,也不應在打印功能中創建新節點。打印功能應該獲得對節點第一個元素的引用。即void print(node * firstNode);'。在函數中,你需要循環直到'next'指向** NULL ** – Mahesh 2011-03-16 11:48:57

0
node *temp = new node; 

這行是不必要的,並且泄漏內存; 其餘的打印程序是正確的,因此如果「空集」是打印機,因此集合是空的

+0

嗯..你可以看看我的功能,添加一個筆記(在編輯),也許這是錯的? – ABlok 2011-03-16 11:36:13

+1

@ABlok:該例程對於設置初始節點似乎是正確的。你如何添加更晚的節點? – 2011-03-16 11:42:21

+0

我還沒有實現該功能。在開始添加更多內容之前,我希望讓我的輸出函數能夠在至少一個節點上工作。 – ABlok 2011-03-16 11:48:25

0

從你發佈的少量代碼,它應該工作,所以我的猜測是有些事情是錯的隨着名單的建設。如上所述,你的代碼中有一些不相干的東西 - 無用的「新節點」,但也有你的(臨時== NULL);這個測試可以直接用「第一」來操作。當然,確保strSet首先初始化爲null。

然後只有你在while()之前和else之後創建temp。這更合乎邏輯(並且更優化一點,儘管你在那裏贏不了多少 - 但你會獲得可讀性)。