此代码正在构建的列表是什么?

What is the list that is being built by this code?

谁能告诉我这个程序正在构建的确切列表是什么? (程序没有运行,这很好)。此外,如果您能向我指出与制作列表相关的任何代码行,我们将不胜感激,我在跟踪该程序时遇到了问题。

我好像看到的是'values'数据好像是一个节点链表?不过我不知道,只是迷路了。

   #include <stdio.h>
   #include "sNode.h"

    int main()
    {
       int i;
       int rV = 0;
       List l = NULL;
       char* input[] = { "06", "24", "3" };
       sNode *s, *t;

       for( i=0; i<3; ++i )
       {
          t = (sNode*)malloc( sizeof( sNode ));
          if( t == NULL )
          {
             fprintf( stderr, "Couldn't get memory for a node!  Exiting." );
             rV = 1;
             break;
          }
          t->data = input[i];
          t->next = l;
          l = t;
       }


       s = l;
       while( s != NULL )
       {
          t = s->next;
          free( s );
          s = t;
       }

       return rV;
}

如何跟踪程序的对象

我们在这里查看 l,因为它属于 List 类型,即所讨论的对象。 l 改变的行是

int main()
{
        List l = NULL;
        for( i=0; i<3; ++i )
        {
                l = t;
        }
}

似乎 t 被分配给 l 所以我们看看 t:

int main()
{
    List l = NULL;
    sNode *s, *t;

    for( i=0; i<3; ++i )
    {
            t = (sNode*)malloc( sizeof( sNode ));
            if( t == NULL )
            {
                    fprintf( stderr, "Couldn't get memory for a node!  Exiting." );
                    rV = 1;
                    break;
            }
            t->data = input[i];
            t->next = l;
            l = t;
    }
    while( s != NULL )
    {
            t = s->next;
    }

现在更清楚发生了什么。 malloc 正在为 t 的地址分配 sNode 大小的动态内存。根据 http://www.cplusplus.com/reference/iterator/next/t->next 指向下一个元素(它正在通过 t->next = l 重新分配给 l。继续这样做;提示 你接下来看一下 s,因为 s 正在被改变。看来 t 的成员数据正在被重新分配,具体来说,它现在等于 &input + sizeof(i) 的输入。

l 指向链表的头部。 所以 l 被分配 NULL 开始,即空链表。

在 for 循环的第一次迭代中,创建了一个节点并为其分配了值“06”。 l 设置为指向新创建的节点。所以你有:

l ---> ("06", NULL)

在 for 循环的第二次迭代中,创建了一个节点并为其分配了值“24”。 l 设置为指向新创建的节点。所以你有:

l ---> ("24", next=---)---> ("06", next=NULL)

在 for 循环的第三次迭代中,创建了一个节点并为其分配了值“3”。 l 设置为指向新创建的节点。所以你有:

l ---> ("3", next=---)---> ("24", next=---)---> ("06", next=NULL)

最后你有一个链表,其中元素被插入到前面。