使用const指针打印双链表

时间:2014-07-08 19:41:35

标签: c++ c printing delete-operator doubly-linked-list

我不明白为什么一个功能不起作用。它与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;
};

1 个答案:

答案 0 :(得分:1)

这条线不对:

Node* current_node = begin;

由于begin的类型为const Node*,您需要将该行的current_node类型更改为const Node*

const Node* current_node = begin;

关于你的函数erase,我看到了一些问题:

  1. 如果begin->prev为NULL,则会在行中遇到问题:

    begin_node->next = next_node;
    
  2. end是否应为NULL?如果没有,我在任何地方都看不到end->prev设置为begin_node。没有它,双重链表就会被打破。