我尝试实现单独链接的C ++。我创建了一个方法,它创建一个节点并添加一个值并指向另一个节点,但我必须记住索引。
班级方法:
void LinkedList::addValue ( int val )
{
if ( ! index )
{
n = new Node();
head = n;
n->value = val;
n->next = NULL;
}
else
{
n->next = new Node( );
n = n->next;
n->value = val;
}
++index;
}
答案 0 :(得分:2)
我想,你已经有两个成员变量: head 这是根节点, n 是最后一个节点。您应该在构造函数中使用NULL(对于c ++ 11为nullptr)初始化它们。然后,您可以在向列表中添加新值时检查 n == NULL 。
LinkedList::LinkedList():head(NULL),n(NULL)
{}
void LinkedList::addValue ( int val )
{
if (n==NULL)
{
n = new Node();
head = n;
n->value = val;
n->next = NULL;
}
else
{
n->next = new Node( );
n = n->next;
n->value = val;
}
}
但是,如果要在一次快速读取操作中查找列表大小而不迭代其所有节点,则索引变量非常有用。
答案 1 :(得分:1)
您可以创建另一个名为 Tail 的指针,指向最后一个元素。这样,您可以在没有索引的情况下为列表添加值。 我将此方法称为追加 void append(int val){
void append(int val) {
Node* tmp = new Node(); // creating a temporary pointer to a new node
tmp -> value = val
last -> next = tmp; // connect the new node to the linked list
last = tmp; // set the last to the newly created node
listSize++; // increase the size of the list
}
您还可以通过为节点创建构造函数来改进代码:
Class Node{
public:
int value;
Node * next;
Node(Node * nextEle = NULL) {
next = nextEle;
}
Node(int val,Node * nextEle = NULL) {
value = val;
next = nextEle;
}
}