删除双向链表中给定节点之后的节点
Remove a node after a given node in a doubly linked list
我正在尝试在我的 class 中编写一个函数,该函数接受一个节点并在双向链表中直接删除该节点之后的节点。我有单独的函数可以删除第一个或最后一个节点,所以这只是在中间节点的情况下。我认为它的逻辑是有道理的并且我的代码可以编译,但是当我尝试测试它时,程序永远不会停止 运行,所以我认为它卡在了 while 循环中。我也不确定我是否正确调用了该函数。在由 1
、2
、3
和 4
填充的名为 DLL
的双向链表中,我试图通过将 3
删除 DLL.removeAfter(2)
主要。我明白这在逻辑上是有缺陷的,因为列表中可能有多个 2
,但我不知道什么是正确的。
void DoublyLinkedList::removeAfter(const DListNode &p)
{
DListNode *node = header.next;
while(node != &p)
{
node->next; //iterate to p;
}
node->next; //Get to the node after p that is to be deleted
node->prev->next = node->next;
node->next->prev = node->prev;
delete node;
}
我认为您想用 node = node->next
替换 node->next
的两个实例,否则您永远不会更改 node
的值。
void DoublyLinkedList::removeAfter(const DListNode &p)
{
DListNode *node = header.next;
while(node != &p) {
node = node->next; //iterate to p;
}
DListNode* del_note = node->next; //Get to the node after p that is to be deleted
node->next = del_note->next;
del_note->next->prev = node;
delete del_note;
}
当然,这只会在找到第一个元素时找到 while
中断。
void DoublyLinkedList::removeAfter(const DListNode &p)
{
DListNode *node = &header,*NextNode=null;
do {
node = node->next;
}
while(node != &p);
if(node->next != null) `{
NextNode = node->next; //Next Node need to be removed but if next node have more modes attached than it should again assigned to the node then it should get removed....
if(NextNode->next != null)
node->next = NextNode->next;
else
`node->next = null;
}
我正在尝试在我的 class 中编写一个函数,该函数接受一个节点并在双向链表中直接删除该节点之后的节点。我有单独的函数可以删除第一个或最后一个节点,所以这只是在中间节点的情况下。我认为它的逻辑是有道理的并且我的代码可以编译,但是当我尝试测试它时,程序永远不会停止 运行,所以我认为它卡在了 while 循环中。我也不确定我是否正确调用了该函数。在由 1
、2
、3
和 4
填充的名为 DLL
的双向链表中,我试图通过将 3
删除 DLL.removeAfter(2)
主要。我明白这在逻辑上是有缺陷的,因为列表中可能有多个 2
,但我不知道什么是正确的。
void DoublyLinkedList::removeAfter(const DListNode &p)
{
DListNode *node = header.next;
while(node != &p)
{
node->next; //iterate to p;
}
node->next; //Get to the node after p that is to be deleted
node->prev->next = node->next;
node->next->prev = node->prev;
delete node;
}
我认为您想用 node = node->next
替换 node->next
的两个实例,否则您永远不会更改 node
的值。
void DoublyLinkedList::removeAfter(const DListNode &p)
{
DListNode *node = header.next;
while(node != &p) {
node = node->next; //iterate to p;
}
DListNode* del_note = node->next; //Get to the node after p that is to be deleted
node->next = del_note->next;
del_note->next->prev = node;
delete del_note;
}
当然,这只会在找到第一个元素时找到 while
中断。
void DoublyLinkedList::removeAfter(const DListNode &p)
{
DListNode *node = &header,*NextNode=null;
do {
node = node->next;
}
while(node != &p);
if(node->next != null) `{
NextNode = node->next; //Next Node need to be removed but if next node have more modes attached than it should again assigned to the node then it should get removed....
if(NextNode->next != null)
node->next = NextNode->next;
else
`node->next = null;
}