2016-05-17 29 views
0

我想要變得更熟練一點。我觀看了幾個視頻並閱讀了多個論壇帖子,但我仍然遇到問題。我想從一個簡單的鏈表開始。但是,用我目前的代碼只打印最後一個值。如果有人能向我解釋我做錯了什麼,我會很感激。另外,我通常在main.cpp文件中定義所有的函數。但是,它不會讓我這樣做我的鏈表。另外,在main.cpp文件中定義所有功能是一種好習慣還是我應該打破的習慣?鏈接列表只顯示最後輸入的值

在此先感謝:)。 下面是我的LinkedList文件:

#pragma once 
#include <iostream> 
using namespace std; 

class LinkedList { 
    struct node { 
     int data; 
     node *next; 

    }; 
public: 
    LinkedList() { 
     head = NULL; 
    } 

    node *newNode; 
    node *temp; 
    node *head; 

    void insertData(int value) { 
     newNode = new node; 
     newNode->data = value; 
     temp = newNode; 
     head = newNode; 
     temp->next = newNode; 
     temp = temp->next; 
     newNode->next = NULL; 
    } 

    void printList() { 
     node *print; 
     print = head; 
     while (print != NULL) { 
     cout << print->data; 
     print = print->next; 
     } 
    } 

}; 

這裏是我的main.cpp文件

#include <iostream> 
#include "LinkedList.h" 
using namespace std; 
int main() { 
    LinkedList list; 
    list.insertData(1); 
    list.insertData(2); 
    list.insertData(3); 
    list.printList(); 


    system("pause"); 
    return 0; 
} 
+1

如何插入節點:創建一個新節點,將其下一個指針設置爲當前頭,將當前頭設置爲新節點。就這麼簡單。 'insertData'中的所有分配是怎麼回事? – user657267

+0

我觀看了鏈接列表上的視頻,並且視頻中的人不停地說使用臨時指針將列表鏈接在一起。他有一個指向新節點的指針,頭部指針和一個臨時指針。它仍然無法正確顯示。我的打印功能看起來是否正確? – starlight

+0

他可能是指'node * temp = new node; temp-> data = value; temp-> next = head; head = temp;' – user657267

回答

0
void insertData(int value) { 
    newNode = new node; 
    newNode->data = value; 
    temp = newNode; 
    head = newNode; 
    temp->next = newNode; 
    temp = temp->next; 
    newNode->next = NULL; 
} 

在你的代碼,head = newNode採取任何head指着,並拋出它贊成newNode。實質上,每次嘗試向列表中插入新值時,都會丟棄整個列表。

相反,您的插入應該這樣做

void insertData(int value) { 
    newNode = new node; //Create ourselves a new node 
    newNode->data = value; //Put the proper value in 
    newNode->next = head; //Make it so the whole list is after our node 
    head = newNode; //Make our node the first in the list 
} 

有在你的代碼中的一些其他的事情我會建議更換,喜歡的事實,你有newNodetemp成員變量時,他們可能僅僅是局部的到函數,以及你沒有析構函數。但是您的打印功能應該與修改後的插頁一起使用(請參閱運行here)。

+0

感謝您花時間解釋。現在對我來說更清楚了。看起來我試圖讓事情變得複雜一點,哈哈:)。此外,謝謝你對本地變量和析構函數的建議。我現在肯定會考慮這些事情。 – starlight