Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 头部=新节点和新节点之间的差异->;ptr=头_C++_Linked List - Fatal编程技术网

C++ 头部=新节点和新节点之间的差异->;ptr=头

C++ 头部=新节点和新节点之间的差异->;ptr=头,c++,linked-list,C++,Linked List,下面是基本链表的insertastart()fn的代码。我不明白x->ptr=h和h=x之间有什么区别,其中h是head。请向我解释每条语句的作用 #include<iostream> using namespace std; class node{ public: int val; node*ptr; }; class linkedlist{ private: node*h; public: linkedlist() :h(NULL) {}

下面是基本链表的insertastart()fn的代码。我不明白x->ptr=h和h=x之间有什么区别,其中h是head。请向我解释每条语句的作用

#include<iostream>

using namespace std;
class node{
public:
    int val;
    node*ptr;
};
class linkedlist{
private:
    node*h;
public:
    linkedlist() :h(NULL)
    {}
    void ias(int y)
    {
        node* x = new node;
        x->val = y;
        x->ptr = h;
        h = x;
    }
};
#包括
使用名称空间std;
类节点{
公众:
int-val;
节点*ptr;
};
类链接列表{
私人:
节点*h;
公众:
linkedlist():h(NULL)
{}
无效国际会计准则(国际会计准则)
{
node*x=新节点;
x->val=y;
x->ptr=h;
h=x;
}
};

h
是一个指针,它应该观察列表的标题。假设
ias
的职责是在列表前面插入一个新值,则会发生如下情况:

  • 创建类型为
    node
    的未命名对象,并将其地址存储在变量
    x
  • y
    的值复制到
    x
    指向的
    node
    类型的未命名对象的数据成员
    val
  • h
    的值,即列表第一个节点的地址,复制到
    x
    指向的
    node
    类型的未命名对象的数据成员
    ptr
  • 您说指针
    h
    现在应该观察
    node
    类型的未命名对象,该对象由
    x
    作为列表的头部指向。您可以通过将
    x
    指向的
    node
    类型的未命名对象的地址复制到
    h
    中来实现这一点

希望这有帮助。

这是你写的,你能告诉我们吗?关于这些陈述,你到底不明白什么?它们只是作业,没有魔法发生。@grkbb101也许有帮助?我知道这是错误的,但这是我从这些语句中得到的,当我们做x->ptr=h时,x成为第一个节点,当我们做h=x时,h开始指向x,但因为h是第一个节点的ptr,x是第一个节点,h指向它自己。那个么,在我的思考过程中,我错在哪里呢?你们的回答很有帮助。你们能以更详细的方式重新解释最后一点吗?thanx
h
始终包含列表中类型为
node
的第一个对象的地址(或
nullptr
如果不存在
node
)。在列表前面插入新节点时(如前3条指令所示),必须更新存储在
h
中的地址,使其指向新的第一个对象。如果你觉得答案有用,请随意投票和/或接受。我很高兴它有帮助,你能接受答案吗?嗯,我正在尝试,但我不知道怎么做。你能告诉我怎么做吗?在答案的右侧,你应该看到两个箭头内的数字(在本例中为零)。在底部箭头下方应有一个标记,您可以单击该标记。单击可将答案标记为已接受答案。