无法在我的链接列表中插入项目,head始终为NULL



我是C++的新手,正在尝试创建一个包含整数值的单链表数据结构。

我的insert方法有问题,我传递给函数的头引用似乎总是NULL(可能我错误地传递了它的值(。

我想使用以下插入方法:

insert(L,x(:其中L是指向列表第一个元素的指针,x是要插入的整数值。

这是我的链接列表hpp文件:

class LinkedList{
private:
struct Node{
int data;
Node* next;
};
Node* head;
public:
LinkedList();
~LinkedList();
void insert(Node* _head,int _value);
int lenght(Node* _head);
Node* getHead();
};

这是我的链接列表cpp文件:

LinkedList::LinkedList(){
head = NULL;
}
LinkedList::~LinkedList(){
}
void LinkedList::insert(LinkedList::Node* _head,int _value){
Node* temp = new Node;
temp->data = _value;
temp->next = NULL;
// _head is NULL every time this function is called
if(_head == NULL){
_head = temp;
}
else{
while(_head->next != NULL){
_head = _head->next;
}
_head->next = temp;
}
}
int LinkedList::lenght(LinkedList::Node* _head){
int count = 0;
while(_head!=NULL){
count++;
_head=_head->next;
}
return count;
}

LinkedList::Node* LinkedList::getHead(){
return head;
}

这是主文件:

int main(int argc, const char * argv[]) {
LinkedList list;
list.insert(list.getHead(), 3);
list.insert(list.getHead(), 4);
list.insert(list.getHead(), 5);
list.insert(list.getHead(), 6);
cout << list.lenght(list.getHead()); //This prints out 0 elements 
return 0;
}

代码运行良好,但列表中的元素数始终为0。insert函数内部的_head似乎总是指向null。

我希望我能很好地描述这个问题,感谢你提前提供的帮助。

Andrea

head节点总是等于nullptr,因为函数insert处理函数getHead返回的原始head的副本。因此,更改副本不会影响原始头的值。

这些成员功能

void insert(Node* _head,int _value);

Node* getHead();

没有道理。为什么将私有数据成员头返回给列表的用户?在这种情况下,用户可以绕过公共界面直接更改列表中的数据。

像一样声明函数insert

void insert( int value );

并且完全去除函数CCD_ 4。

在这种情况下,函数insert(考虑到使用的算法,最好至少像append一样重命名(可以像一样定义

void LinkedList::insert( int value )
{
Node *temp = new Node { value, nullptr };
Node **tail = &head;
while ( *tail ) tail = &( *tail )->next;
*tail = temp;
} 

主要来说,该函数可以像一样调用

list.insert( 3 );
list.insert( 4 );
list.insert( 5 );
list.insert( 6 );

如果任务要求函数getHead,那么至少要像一样延迟函数

Node * & getHead();

在这种情况下,函数插入看起来像

void LinkedList::insert( Node * &node, int value )
{
Node *temp = new Node { value, nullptr };
Node **tail = &node;
while ( *tail ) tail = &( *tail )->next;
*tail = temp;
} 

您的问题在这里:

if (_head == NULL) {
_head = temp;
}

您将新的"第一个"元素分配给head的本地副本,而不是实际的head。修复它,它工作:

if (_head == NULL) {
this->head = temp; // "this" isn't strictly needed, but it signals that head is a member and not a local.
}

相关内容

  • 没有找到相关文章

最新更新