我正在创建一个双向链表。大部分代码都提供了完成insert_before和insert_after函数的说明。双向链表:insert_before函数C++
struct Node {
int data; // each node holds an integer data
Node* previous; // pointer to the previous node
Node* next; // pointer to the next node
Node(int d=0, Node* prv=NULL, Node* nxt=NULL) : data(d), previous(prv), next(nxt) {}
Node* get_previous() const { return previous; }
Node* get_next() const { return next; }
Node* insert_before(int d); // insert the int before this node
// return a pointer to the inserted node
Node* insert_after(int d); // insert the int after this node
// return a pointer to the inserted node
void delete_before(); // delete the node before this node
void delete_after(); // delete the node after this node
};
Node* Node::insert_before(int d) {
Node *newNode = new Node(d);
newNode->previous = this->previous;
newNode->next = this;
this->previous = newNode;
return newNode;
}
Node* Node::insert_after(int d) {
Node *newNode = new Node(d);
newNode->previous = this;
newNode->next = this->next;
this->next = newNode;
return newNode;
}
void display_list(Node* header, Node* trailer) {
Node* p=header->get_next();
while (p!=trailer) {
cout << p->data << ", ";
p=p->get_next();
}
cout << endl;
}
int main() {
cout << "Create a new list" << endl;
Node *header = new Node(-1);
Node *trailer = new Node(-2);
trailer->previous = header;
header->next = trailer;
cout << "list: ";
display_list(header,trailer);
cout << endl;
// Insert 10 nodes at back with value 10,20,30,..,100
cout << "Insert 10 nodes at back with value 10,20,30,..,100" << endl;
for (int i=10;i<=100;i+=10) {
trailer->insert_before(i);
}
cout << "list: ";
display_list(header,trailer);
cout << endl;
return 0;
}
insert_after函数可以很好地工作,但由于某些原因,insert_before函数根本不起作用。
关于如何解决这个问题的任何想法?
我在insert_before中看不到任何问题。你能描述一下到底发生了什么吗? –