另一个链表中的链表



我正在尝试创建一个包含另一个链表的列表,然后我想将它们连接到一个列表中。我对此有一些困难。所以首先我做了这个:typedef列表DList-它生成一种类型的链表;然后,例如,我制作DList A和B。我在这两个列表中插入一些数字,比如1,2,3;然后我将它们添加到主链接列表中,如下所示:

List<DList> L;
L.Add_Node(A);
L.Add_Node(B);

在这个项目的这个阶段,一切似乎都很好。在这之后,我试图制作一个函数来连接separete链表。我制作了一个新的List NewList,其中将存储值。我的问题来了。我不知道如何编写函数。我做了这样的事情:首先我做了一个函数,它将循环L列表中的节点(有两个小列表)。然后我转到连接函数。你可以在下面的代码中看到它们:

template<class T>
void Start(List<T> L, List<T> NewList)
  {
    List<T> *temp = L.start_ptr; //I get the position of the first element;
    while(temp)
      {
         NewList = Concat(NewList, temp->data);
         temp = temp->next;
      }
  }
 template<class T>
 List Concat(List<T> L1, List<T> L2)
   {
     List<T> *temp1, *temp2;
     List<T> NewList;
     temp1 = L1.start_ptr;
     temp2 = L2.start_ptr;
     while(temp1)
       {
         NewList.Add_Node(temp1->data);
         temp1 = temp1->next;
       }
      while(temp2)
       {
         NewList.Add_Node(temp2->data);
         temp2 = temp2->next;
       }
    return NewList;
   }

这些是我的职能。也许他们完全错了。。。编译器给我的错误是成员start_ptr、data和next是私有的(这是真的)。这给了我更多的错误。。我正在学习的书中写着这样的东西,但那里太复杂了。。。如果你不想花时间帮助我,我会很感激,即使你给了我一个很好的来源,我可以从中阅读更多关于这类列表的信息。

在函数开始时,您将经历两个类型为T.的列表

但是,当您在Concat方法中连接两个列表时,您要将整个列表与另一个列表的连接起来。

此外,您正在通过复制传递参数,这可能不是您想要做的事情

我想你想做的是这样的事情:

void Start(List< List <T> > & L, List<T> &NewList)

传递副本意味着您的程序将参数的副本发送给您的函数。这意味着您传递的列表将被复制(如果您的列表很大,可能会很重),并且只有副本将被修改。

在我为您提供的Start函数的新版本中,您可以注意到我添加了&。这意味着该值是通过引用传递的。基本上,这意味着它实际上是您正在使用的对象,而不是副本。

最后,关于成员是私有的,您应该添加公共访问器,这样它们就可以在类之外使用。

在您的情况下,您可以在类中添加一个公共方法:

template<class T>
const List<T> *get_start_ptr() const
{
  return (start_ptr);
}

然后添加要移动的公共方法,如:

template<class T>
const List<T> *next() const
{
  return (next);
}

访问器以const的形式返回值,以确保在过程中不会对其进行非自愿修改。即使您显然没有在代码中修改它,也可以尽可能多地使用constness,并在实际想要修改值时明确表示。

相关内容

  • 没有找到相关文章

最新更新