2012-07-23 43 views
3

我想用用戶提供的數字填充鏈接列表,並將它們重新打印出來。但是,我的實現,如下所示,將只打印出第一個輸入數字。我插入名單的頭部。你能告訴什麼是錯的?獲取鏈接列表以打印出數字

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

Node newNode(int num, Node *next_node) 
{ 
    Node node; 
    node.data = num; 
    node.next = next_node; 
    return node; 
} 

void headInsert(Node* head, int num) 
{ 
    Node* tmp; 
    tmp = new Node; 
    tmp->data = num; 
    tmp->next = head; 
    head = tmp; 
} 

int main(int argc, char* argv[]) 
{ 

    if (argc < 2) 
    { 
     std::cout<< "No input for linked list!! \n" << 
        "Usage: ./linkedlist 2 3 567 12 .. etc." 
       <<"\n"; 
     return 0; 
    } 

    Node *head, *temp; 
    head = new Node; 
    head->data = atoi(argv[1]); 
    head->next = NULL; 

    headInsert(head, atoi(argv[2])); 
    headInsert(head, atoi(argv[3])); 

    temp = head; 

    while(temp != NULL) 
    { 
     std::cout << temp->data<< " "; 
     temp = temp->next; 
    } 

     return EXIT_SUCCESS; 
    } 
+0

由於它被標記爲'C++',你爲什麼不使用它?我不只是指'std :: list',而是爲什麼不以面向對象的方式實現你的列表/節點結構?沒有成員函數的'struct'的使用,以及用來修改它的自由函數都非常「C」。如果這是你自己的練習,至少我部分理解。我祈禱,儘管今天這不是「C++」課程的狀態。 – Chad 2012-07-23 15:43:23

+0

[插入鏈接列表創建循環]的可能重複(http://stackoverflow.com/questions/10770543/insertion-in-linked-list-creating-loop) – 2012-07-23 15:48:22

+1

這是學校課程的狀態,我認爲它是一件好事。當你只理解一個std :: list時,上帝幫助你調試一個問題。在使用不需要知識的免費方式之前,您應該瞭解如何使用指針創建自己的列表。話雖如此,在生產代碼中,你應該使用std :: implements。 – 2012-07-23 15:52:01

回答

5

headInsert()head = tmp;只改變局部變量head

您可以將其作爲參考指針,Node*& head傳遞給它。