我是否正确添加了链接列表前面的项目

时间:2013-11-04 15:58:55

标签: c++ linked-list doubly-linked-list

在这种情况下,我需要实现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++;
}

我做得对吗?如果没有,为什么?如果是的话,有没有更好的方法呢?

2 个答案:

答案 0 :(得分:1)

我不会涉及太多细节,因为这似乎是一项家庭作业,但简短的回答是,不。

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

上面的代码中有内存泄漏。

答案 1 :(得分:1)

首先,名称dummyNode表示列表的开头看起来很奇怪。用头代替它会好得多。你还需要一个指向列表尾部的变量。

至于你的功能那么它很简单

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

如果类Node有一个带有接受数据和指针的参数的构造函数,那也不错。类列表还必须具有显式定义的默认构造函数,或者在定义它们时必须初始化其数据成员。