【问题标题】:Linked Lists in another Linked list另一个链表中的链表
【发布时间】:2013-07-02 16:02:36
【问题描述】:

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

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

在程序的这个阶段,一切似乎都很好。在此之后,我试图创建一个函数来连接单独的链接列表。我创建了一个新的 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 是私有的(这是真的)。它给了我更多的错误..这样的东西写在我正在学习的书中,但是那里很复杂......如果你不想花时间帮助我,我什至会很感激如果你给我一个很好的来源,我可以从中阅读更多关于这种类型的列表。

【问题讨论】:

    标签: c++ list linked-list


    【解决方案1】:

    在你的函数开始中,你正在经历两个 T 类型的列表。

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

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

    我认为你的意思是这样的:

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

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

    在我给你的新版开始功能上,你可以注意到我添加了&amp;。这意味着该值是通过引用传递的。基本上,这意味着它实际上是您使用的对象,而不是副本。

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

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

    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,并在您真正想要修改值时明确说明。

    【讨论】:

    • 你需要一个引用List&lt;T&gt; &amp;NewList作为参数,否则当函数体超出范围时,连接最终会被丢弃。
    • 那么我为班级成员得到的错误呢(它说他们是私有的)。
    • 你在使用 std::list 吗?还是您自己的列表?
    • 我自己的列表。但是我只使用了在这个程序中添加节点和打印列表的功能。他们工作正常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-24
    • 1970-01-01
    • 2011-06-26
    • 1970-01-01
    • 2023-03-22
    相关资源
    最近更新 更多