在这种情况下,我需要实现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 :(得分: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有一个带有接受数据和指针的参数的构造函数,那也不错。类列表还必须具有显式定义的默认构造函数,或者在定义它们时必须初始化其数据成员。