另一个链接列表中的链接列表

时间:2013-07-02 16:02:36

标签: c++ list linked-list

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

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

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

1 个答案:

答案 0 :(得分:0)

在你的函数开始中,你将经历两个类型为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,并在实际想要修改值时明确。