2013-11-04 49 views
-2

在這種情況下,我需要實現addFront()方法,該方法是在鏈表的前面添加一個整數。我是否正確添加鏈接列表前的項目

class Node{ 
    public: 
    int data; 
    Node* next; 
    Node* prev; 
    } 
    class List { 

    void addFront(int item); 

    protected: 
    Node* dummyNode; 
    int numItems; //number of item is the linkedlist 
}; 

下面是我傾向於實行addFront()

void addFront(int data){ 
    Node* head = new Node(); 


    if(numItems == 0) //if no item in the list. 
    { 
     //Set the head node to be dummyNode 
     head = dummyNode; 

     //Because the next node the head is pointing to is NULL. 
     head -> next = NULL; 
    } 

    //Create a new node. 
    Node* newNode = new Node(); 

    //Set value 
    newNode->data = data; 

    //Let the previous pointer of dummyNode points to newNode. 
    head->prev = newNode; 

    //Re-set head to be newNode. 
    head = newNode; 

    numItems++; 
} 

上午我做正確?如果不是,爲什麼?如果是的話,有沒有更好的方法來做到這一點?

+0

這功課嗎? –

+0

@JohnDibling這取決於你。 – FlowerFire

+0

不可以。對於其中一種情況,您在初始插入時泄漏了內存。您也沒有將'dummyNode'初始化爲'List'構造的nullptr。在取消引用之前,您從不檢查'dummyNode'是否爲nullptr。這甚至沒有試圖運行這個。 (a)不,(b)因爲你不知道如何編寫一個鏈表,(c)最後一個問題在前兩個問題之後是沒有意義的。並且否認第一個問你任何關於這個問題的人是不是開始工作的方式。 – WhozCraig

回答

1

我不會涉及太多的細節,因爲這似乎是一項家庭作業,但簡短的答案是,不。

Node* head = new Node(); 
if(numItems == 0) //if no item in the list. 
{ 
    //Set the head node to be dummyNode 
    head = dummyNode; 
    //... 
} 

您在上面的代碼中有內存泄漏。

1

首先名稱dummyNode表示列表的開始看起來很奇怪。將它替換爲頭部會好得多。你也需要一個指向列表尾部的變量。

至於你的函數,那麼很簡單

void addFront(int data) 
{ 
    Node *head = new Node(); 
    head->data = data; 
    head->next = dummyNode; 
    dummyNode->prev = head; 
    dummyNode = head; 
    numItems++; 
} 

而且這將是不壞,如果等級節點曾與參數接受數據和指針的構造函數。類列表還必須具有明確定義的默認構造函數,或者其數據成員在定義時必須初始化。

+0

感謝您的建議。所以你在說什麼好像我錯過了一個變量指向列表的尾部正確? – FlowerFire

+0

是的,你是對的。否則,很難將元素添加到列表的尾部。所以我會在類List Node * head,* tail中定義; –

+0

是的,這就是我傾向於做的。我只想找到一個棘手的方法來解決這個問題。順便說一下,你可以在我的代碼基礎上編輯嗎?謝謝。 – FlowerFire

相關問題