【发布时间】:2020-02-19 14:32:48
【问题描述】:
我是 C++ 新手,正在尝试创建一个包含整数值的单链表数据结构。
我的插入方法有问题,我传递给函数的头引用似乎总是 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。
希望我能很好地描述问题,提前感谢您的帮助。
安德烈亚
【问题讨论】:
-
您正在移动列表的实际头部,
_head成员变量。保留一个副本到列表的头部,并使用一个临时变量来迭代,比如LinkedList::Node* iterator = _head -
Insert() 不允许您返回创建的头部,它使用头部成员的副本。
标签: c++ algorithm pointers linked-list singly-linked-list