【发布时间】:2020-10-26 15:07:36
【问题描述】:
所以,我正在学习 C++ 和数据结构。我想做的第一个是单链表。我创建/复制了以下代码:
class Node {
public:
int data;
Node* next;
};
Node* head = NULL;
void createnode(int* value) {
Node* new_node = new Node(); //allocate memory size of node
new_node->data = *value; //data is given
new_node->next = head; //*next pointer is to head
head = new_node;
}
void printlist(Node* n) {
while (n != NULL) {
cout << n->data << "\n";
n = n->next;
}
}
我正在努力想象这两行:
new_node->next = head; //*next pointer is to head
head = new_node;
新节点中的“下一个”节点指针被设置为链表的“头”,这很好(我正在可视化插入“头”左侧的节点并将所有内容移动到权利,包括这个“头”对象)。然后,在下一行中,head 被设置为 'new_node'。
所以,它创建了某种循环连接?如果这个链表的“头”不作为一种蛇的头,在后面加上值,增加蛇的长度,如果你愿意的话。
【问题讨论】:
-
那么,它创建了某种循环连接? 不,您只是在前面而不是在末尾添加节点。
-
我想做的第一个是单链表。我创建/复制了以下代码 运气不好。这不是我所说的惯用 C++ 代码...
-
new_node->next = head;new_node的next指针设置为存储在head中的指针。现在,new_node->next(和head)指向列表的当前第一个节点。head = new_node;现在,head被覆盖以指向新节点。节点指针中没有循环。从现在开始,新节点将成为您列表的首位。 -
要掌握指针(和列表)的魔力,请尝试在纸上(用铅笔和橡皮擦),其中节点是框,指针是箭头。这是老式的,但不知何故仍然有效...... ;-)
-
head不是对象,head是指向对象的指针。并且可以设置为指向另一个对象。
标签: c++ data-structures