我不明白为什么一个功能不起作用。它与const指针有关。
//prints the contents of the list interval [begin,end)
//to the output stream os; values should be separated by spaces
void print(const Node* begin, const Node* end, ostream& os)
{
Node* current_node = begin;
do
{
os << current_node->value << " ";
current_node = current_node->next;
}
while(current_node != end);
os << endl;
}
我不允许更改此功能的头部。
这个功能会起作用吗?
//erases the list interval [begin,end)
//attention: this should not erase 'end', see remarks above
void erase(Node* begin, Node* end){
Node* current_node = begin;
Node* next_node = begin->next;
Node* begin_node = begin->prev;
while(current_node != end){
next_node->prev = current_node->prev;
begin_node->next = next_node;
delete current_node;
current_node = next_node;
next_node = current_node->next;
}
}
这是Node的结构
struct Node
{
int value;
struct Node* next;
struct Node* prev;
};
答案 0 :(得分:1)
这条线不对:
Node* current_node = begin;
由于begin
的类型为const Node*
,您需要将该行的current_node
类型更改为const Node*
:
const Node* current_node = begin;
关于你的函数erase
,我看到了一些问题:
如果begin->prev
为NULL,则会在行中遇到问题:
begin_node->next = next_node;
end
是否应为NULL?如果没有,我在任何地方都看不到end->prev
设置为begin_node
。没有它,双重链表就会被打破。