C++链表:节点创建函数

Posted

技术标签:

【中文标题】C++链表:节点创建函数【英文标题】:C++ Linked List: Node Creation Function 【发布时间】: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-&gt;next = head; new_nodenext 指针设置为存储在 head 中的指针。现在,new_node-&gt;next(和head)指向列表的当前第一个节点。 head = new_node; 现在,head 被覆盖以指向新节点。节点指针中没有循环。从现在开始,新节点将成为您列表的首位。 要掌握指针(和列表)的魔力,请尝试在纸上(用铅笔和橡皮擦),其中节点是框,指针是箭头。这是老式的,但不知何故仍然有效...... ;-) head 不是对象,head 是指向对象的指针。并且可以设置为指向另一个对象。 【参考方案1】:

假设你有一个序列:

  a -> b -> c -> NULL; // where head points to a

这些行的作用是(假设您想将 'd' 添加到上一个列表中):

 d -> a; // where a still points to wherever it used to point

然后更新到 HEAD 应该指向的位置,该节点不再是具有 a 的节点,而是具有 d

的节点

【讨论】:

以上是关于C++链表:节点创建函数的主要内容,如果未能解决你的问题,请参考以下文章

C++ 创建单向链表

C++里创建链表时Node是啥意思?Node需要在函数头定义么?要的话怎么定义?

C++继承设计链表

(C++)自定义链表并写入

C++链表插入节点,前一个节点初始化

删除链表的节点(Python and C++解法)