使用链表堆栈实现创建一个反转堆栈的复制构造函数
Create a copy constructor that reverses a stack using a linked list stack implementation
linkList::linkList(linkList const& rhs){
Node *temp = rhs.top;
Node *temp_stack = rhs.top;
while(temp){
char value = temp->letter;
// push(value);
push(temp_stack->letter);
temp = temp_stack->down;
temp_stack = temp_stack->down;
// temp = temp->down;
}
}
void linkList::push(char c) {
Node* new_top = new Node(c);
new_top->down = top;
top = new_top;
}
我的复制构造函数有一个问题,当我调用它时,它会反向显示 link-列表,这是有道理的,因为我将它推到新的 [=13= 的后面]-列表。假设我的功能 100% 正常工作并且我无法更改该功能。我将如何反向添加它?
我在这里查看了几个解决方案,但没有多大帮助。
实用的方法可能是只复制数据两次:
linkList(linkList const& rhs) {
linkList tmp;
// first copy to `tmp`, which will have them in reverse:
for(Node* curr = rhs.top; curr; curr = curr->down)
tmp.push(curr->letter);
// then populate *this from `tmp` which will then have them
// in the original order:
for(Node* curr = tmp.top; curr; curr = curr->down)
push(curr->letter);
}
对于函数中这两个指针的初始声明
Node *temp = rhs.top;
Node *temp_stack = rhs.top;
没有多大意义。他们互相复制。用一个指针遍历链表rhs
.
就够了
如果要创建传递列表的副本,则函数 push
不适合。
您可以通过以下方式定义复制构造函数。
linkList::linkList( linkList const& rhs ) : top( nullptr )
{
Node **current = ⊤
for ( Node *temp = rhs.top; temp != nullptr; temp = temp->down )
{
*current = new Node( temp->letter );
current = &( *current )->down;
}
}
希望class节点的构造函数将创建节点的数据成员down设置为nullptr
。
linkList::linkList(linkList const& rhs){
Node *temp = rhs.top;
Node *temp_stack = rhs.top;
while(temp){
char value = temp->letter;
// push(value);
push(temp_stack->letter);
temp = temp_stack->down;
temp_stack = temp_stack->down;
// temp = temp->down;
}
}
void linkList::push(char c) {
Node* new_top = new Node(c);
new_top->down = top;
top = new_top;
}
我的复制构造函数有一个问题,当我调用它时,它会反向显示 link-列表,这是有道理的,因为我将它推到新的 [=13= 的后面]-列表。假设我的功能 100% 正常工作并且我无法更改该功能。我将如何反向添加它? 我在这里查看了几个解决方案,但没有多大帮助。
实用的方法可能是只复制数据两次:
linkList(linkList const& rhs) {
linkList tmp;
// first copy to `tmp`, which will have them in reverse:
for(Node* curr = rhs.top; curr; curr = curr->down)
tmp.push(curr->letter);
// then populate *this from `tmp` which will then have them
// in the original order:
for(Node* curr = tmp.top; curr; curr = curr->down)
push(curr->letter);
}
对于函数中这两个指针的初始声明
Node *temp = rhs.top;
Node *temp_stack = rhs.top;
没有多大意义。他们互相复制。用一个指针遍历链表rhs
.
如果要创建传递列表的副本,则函数 push
不适合。
您可以通过以下方式定义复制构造函数。
linkList::linkList( linkList const& rhs ) : top( nullptr )
{
Node **current = ⊤
for ( Node *temp = rhs.top; temp != nullptr; temp = temp->down )
{
*current = new Node( temp->letter );
current = &( *current )->down;
}
}
希望class节点的构造函数将创建节点的数据成员down设置为nullptr
。