【问题标题】:Structure of Singly Linked List has me confused单链表的结构让我很困惑
【发布时间】:2017-10-30 10:29:47
【问题描述】:

所以我创建它的原因是因为对于我的 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. 我们设置list=ptr的地址,让list引用ptr

  5. 我们新建一个节点,设置数据字段为28

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

  8. 我们创建一个 info = 52 的新节点

  9. 我们将链接字段指向等于list的内存地址
  10. 我们将节点列表(或者可能是内存地址?)指向当前 ptr 节点

这是我认为它的样子的图像。 ->

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

【问题讨论】:

  • 对于链表,在创建新节点时,通常会使其链接指针指向链表的当前起点,然后将链表指针更改为指向新节点。顺便说一句,我不确定你是否真的问过一个具体的问题......

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


【解决方案1】:

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

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;
}

【讨论】:

    【解决方案2】:

    你最终得到的是一个类似的列表:

    52->16->28

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

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

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

    更新

    我添加了一个图表

    【讨论】:

    • 对我来说看起来是正确的。这里可能有一个隐含的假设,这得益于被明确化。 NodeType * link 可以指向零个或一个 NodeType 对象,但不能指向两个。但是,您可以有两个 不同的 指针指向一个对象。这是一个 N:1 的关系。 (相对于std::unique_ptr<NodeType>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多