如果我用类成员函数初始化它,为什么头在开头不是NULL?这是一个棘手的部分。
#include <iostream>
using namespace std;
struct node
{
int data;
node *next;
};
class linked_list
{
private:
node *head;
public:
void push(node *head, int data);
void printList(node *head);
void printMiddle(node *head);
void makeHeadNull(node *head);
};
void linked_list::push(node *head, int data)
{
node *newNode=new node;
if(head==NULL)
{
head=newNode;
}
else {
newNode->data = data;
newNode->next = head;
head = newNode;
}
}
void linked_list::printMiddle(node *head)
{
node *slow_ptr = head;
node *fast_ptr = head;
if (head!=NULL)
{
while (fast_ptr != NULL && fast_ptr->next != NULL)
{
fast_ptr = fast_ptr->next->next;
slow_ptr = slow_ptr->next;
}
cout<<slow_ptr->data<<" ";
}
void linked_list::printList(node *head)
{
while(head!=NULL)
{
cout<<head->data<<" ";
head=head->next;
}
}
void linked_list::makeHeadNull(node *head)
{
head=NULL;
}
int main()
{
node *head;
linked_list l;
l.makeHeadNull(head);
l.push(head, 0);
l.push(head, 1);
l.push(head, 2);
l.push(head, 3);
l.push(head, 4);
l.printMiddle(head);
}
我想在构造函数中初始化head,但是当我像这样初始化head时,head节点在main中一直是NULL。当我在构造函数中初始化head然后我想将它作为函数push的参数传递时,我会得到错误。
答案 0 :(得分:0)
如果我用类成员函数初始化它,为什么头部在开头不是NULL。
您永远不会使用该成员变量。相反,您在head
中传递main
作为局部变量,并且您已将该变量保持为未初始化。
请注意,您的push
既不会修改成员head
,也不会修改main
中的本地变量。 head = newNode;
修改成员函数本地的变量,当函数返回时,该函数将被销毁。
我怀疑你的意图是修改成员或传递给函数的指针。要修改传递的指针,请传递对它的引用。要修改成员变量,请使用this->
或不要使用具有相同名称的局部变量隐藏该成员。