链表,将列表复制到另一个列表



我正试图将一个列表复制到另一个列表中。

我有这个:

template< typename T > class List {
class Node {
public:
T element;
Node *next;
Node( T a_element, Node * a_suivant = nullptr );
virtual ~Node( void );
};
int _taille;
Node * _first;
Node * _last;
public:
List( void );
virtual ~List( void );
int taille( void );
bool empty( void );

我试图创建一个函数,将一个列表(使用此(复制到另一个列表中,并清空参数中的列表。我试着先清空列表,看看它是否有效,但我总是会出现分段错误。

void copyEmpty( List< T > & a_List ){
Node *c = a_List._last;
while(c!=NULL){
Node *t = c->next;
delete c; 
c = t;
if(c==a_List._last) c = NULL;
}
a_List._last = NULL;
}

如何使用正在使用的列表(this(的next_last_first和参数(a_List(中的列表来实现函数?

最重要的是,你似乎是一个C程序员。。。

  • 不要在C++中使用( void )
  • 使用nullptr而不是NULL!(如果您想使用std::nullptr_t,即定义为decltype(nullptr)的空指针类型,这对于采用指针的重载函数来说可能会变得很重要(
  • 为了符合c++中的标准设计,请使用move构造函数或move运算符,如前面提到的@david-crankin。其中至少有一个也将在您在评论中提到的模板上下文中工作

现在来谈谈问题:我不认为这是一个解决方案,因为我不确定你的问题是否正确。

template <typename T>
class List {
class Node {
public:
T element;
Node* next;
Node( const T& a_element, Node* a_suivant = nullptr );
virtual ~Node();
};
int _taille;
Node* _first;
Node* _last;
public:
List();
virtual ~List();
int taille();
bool empty();
};
template <class T>
void copyEmpty( List< T > & a_List ){
for(auto pNode = a_List._first; pNode != a_List._last;){
Node* const pNext{ pNode->next };
delete pNode;
pNode = pNext;
}
delete a_List._last;
a_List._last = nullptr;
a_List._first = nullptr; 
}

现在我保留了你的函数名。仍然需要解决_last等的私有性问题

我认为在你的解决方案中,你跳过了删除最后一个。

也许你可以添加一个明确的说明_first_last和你的功能分别是什么。

相关内容

  • 没有找到相关文章

最新更新