在给定节点之后插入双向链表中的节点
Insert a node in a doubly linked list after a given node
我有一个函数可以在双向链表的节点后插入一个整数。它编译得很好。但是,当我 运行 它与一个测试用例一起使用一个名为 DLL 的双向链表填充 2 4 6 8 并尝试调用函数在 4 之后插入 5 时,链表没有任何反应,所以这是错误的。只是不知道为什么。
void DoublyLinkedList::insertAfter(const DListNode &p, int newobj) {
DListNode *newNode = new DListNode(newobj);
DListNode *node = header.next;
while(node != &p) {
node = node->next;
}
node = node->next;
node->next->prev = newNode;
}
您需要更新所有涉及的 DListNode 中的两个指针(next 和 prev)。
void DoublyLinkedList::insertAfter(const DListNode &p, int newobj) {
DListNode *newNode = new DListNode(newobj);
DListNode *node = header.next;
while(node != &p) {
node = node->next;
}
newNode->next = node->next;
newNode->prev = node;
// test to know if the insertion is in the middle or in the end.
if (node->next != NULL) // insert in the middle.
node->next->prev = newNode;
else // insert in the end.
lastNode = newNode;
node->next = newNode;
}
有关详细信息,请参阅 https://en.wikipedia.org/wiki/Doubly_linked_list#Inserting_a_node。
2---> 4---> 6--->8
^ |^ |^ |
|____||____||____|
你分配一个newnode
NULL 5--->NULL
^ |
|______|
//Don't know how you are populating a newnodes next and prev but they should be NULL.
你的函数结束后,
2---> 4---> 6--->8
^ | |^ |
|____| ||____|
|
NULL<---5---->NULL
您的列表已损坏。
您必须更新所有相关指针以保持结构完整。
while()
{..
}
newNode->next = node->next;
newNode->prev = node;
node->next=newNode;
if(newNode->next!=NULL)
newNode->next->prev=newNode;
我有一个函数可以在双向链表的节点后插入一个整数。它编译得很好。但是,当我 运行 它与一个测试用例一起使用一个名为 DLL 的双向链表填充 2 4 6 8 并尝试调用函数在 4 之后插入 5 时,链表没有任何反应,所以这是错误的。只是不知道为什么。
void DoublyLinkedList::insertAfter(const DListNode &p, int newobj) {
DListNode *newNode = new DListNode(newobj);
DListNode *node = header.next;
while(node != &p) {
node = node->next;
}
node = node->next;
node->next->prev = newNode;
}
您需要更新所有涉及的 DListNode 中的两个指针(next 和 prev)。
void DoublyLinkedList::insertAfter(const DListNode &p, int newobj) {
DListNode *newNode = new DListNode(newobj);
DListNode *node = header.next;
while(node != &p) {
node = node->next;
}
newNode->next = node->next;
newNode->prev = node;
// test to know if the insertion is in the middle or in the end.
if (node->next != NULL) // insert in the middle.
node->next->prev = newNode;
else // insert in the end.
lastNode = newNode;
node->next = newNode;
}
有关详细信息,请参阅 https://en.wikipedia.org/wiki/Doubly_linked_list#Inserting_a_node。
2---> 4---> 6--->8
^ |^ |^ |
|____||____||____|
你分配一个newnode
NULL 5--->NULL
^ |
|______|
//Don't know how you are populating a newnodes next and prev but they should be NULL.
你的函数结束后,
2---> 4---> 6--->8
^ | |^ |
|____| ||____|
|
NULL<---5---->NULL
您的列表已损坏。 您必须更新所有相关指针以保持结构完整。
while()
{..
}
newNode->next = node->next;
newNode->prev = node;
node->next=newNode;
if(newNode->next!=NULL)
newNode->next->prev=newNode;