单链表的结构让我困惑

时间:2017-10-30 10:29:47

标签: c++ linked-list c++14 singly-linked-list

所以我创建这个的原因是因为对于我的C ++类,我们得到了我们必须构建的代码。 (和周围)我的教授写出这些节点的方式令我感到困惑的是他们如何联系起来。

我一直在寻找许多不同的资源,包括用于链接列表的youtube视频以及有关如何拥有临时节点和头节点的那些资源。

struct NodeType 
       {
       int info;
       NodeType * link;
       };


int main()
{

    NodeType *ptr, *list;

    ptr = new NodeType;
    ptr->info = 16;
    ptr->link = nullptr;
    list = ptr;

    ptr = new NodeType;
    ptr->info = 28;
    ptr->link = nullptr;
    list->link = ptr;

    ptr = new NodeType;
    ptr->info = 52;
    ptr->link = list;
    list = ptr;
 }

我可视化的方式是:

  1. 我们创建一个节点 ptr
  2. 我们设置整数字段info = 16
  3. 我们设置了ptr = NULL
  4. 的链接字段
  5. 我们设置list = ptr的地址,以便列表引用ptr

  6. 我们创建一个新节点并将数据字段设置为28

  7. 我们设置了link field = NULL
  8. 我们将节点列表的链接字段指向ptr

  9. 我们使用info = 52

  10. 创建一个新节点
  11. 我们将链接字段指向列表
  12. 的内存地址
  13. 我们将节点列表(或者它的mem地址?)指向当前的ptr节点
  14. 这是我想象的样子的形象。 - >

    Diagram

    我的问题是,当所有节点彼此指向并且从我的图中指出时,这些节点应该是什么样的,这是错误的。

2 个答案:

答案 0 :(得分:2)

在不重新定义任何变量的情况下查看此内容可能会有所帮助。

struct NodeType 
{
    int info;
    NodeType * link; 
    // Following node
};

int main()
{
    NodeType * middle = new NodeType;
    middle->info = 16;
    // We don't have the next node yet
    // middle->link exists as a name, 
    // and we really should give it a value soon

    NodeType * last = new NodeType;
    last->info = 28;
    last->link = nullptr;
    // There is no next node, this is the final node
    middle->link = second;
    // Good, we have a value for middle->link now

    NodeType * first = new NodeType;
    first->info = 52;
    first->link = middle;
    // The next node is already present

    NodeType * list = first; 
    // A pointer is a value we can copy  

    // Usage and cleanup ommitted
    return 0;
}

答案 1 :(得分:1)

你最终获得的是如下列表:

52-> 16-> 28

首先,您创建一个内部为16的节点,并将其称为list

其次,你创建了一个带有28的另一个节点,并将list->link指向它,所以你有一个列表,哪个初始节点是16,而这一个指向28个

最后,您创建一个带有52的节点,并将其link设置为列表,因此,此节点的下一个节点将是整个列表。然后,您决定调用此新节点list

<强>更新

我添加了一个图表 enter image description here

相关问题