我想要一个插入函数,它调用一个私有递归插入函数,该函数将下一个数字添加到链表的末尾。我在应该使用哪些参数以及递归插入函数中应该包含什么方面遇到了麻烦。我认为递归插入函数需要一个Node指针来递归地步进。
class LinkedList{
private:
struct Node{
int data; //stores data in nodes
Node* next;
~Node(){delete next;}
};
public:
LinkedList(){ first = NULL;}
~LinkedList(){delete first;}
void print() const {
print( first );
}
void insert(const int d){ //here is where the first insert method is
insert(first, d);
}
private:
Node* first;
这是我卡住的函数…
void insert(Node* p, const int d){ //this is the private recursive one
Node* temp = new Node;
temp->data=d;
if(p->next == NULL) p->next = temp;
else insert(p->next, d);
}
};
int main() {
int a[] = { 1, 2, 3, 4, 5, 6};
LinkedList list;
for(int i=0; i<6; i++)
list.insert( a[i] );
}
我想知道如何通过获取不同的参数来重载插入函数。我还想知道我是否正确地遍历了递归函数
调用递归函数的函数应该看起来像
void insert(const int d){
insert(first, d);
}
递归函数应该像
void insert(Node*& p, const int d){
Node* temp = new Node;
temp->data=d;
if(p == NULL) p = temp;
else insert(p->next, d);
}
您希望在分配新节点之前到达列表的末尾。下面这个版本是目前为止你写的最兼容的。
void insert(Node*& p, const int d) {
if (p == NULL) { // reached the end, so allocate new node and set value
p = new Node;
p->data = d;
p->next = NULL;
}
else
insert(p->next, d);
}