我已经制作了单链循环列表,效果很好,但在这种情况下我遇到了这样的问题,如果我想删除尾部,它会删除它,如果节点作为尾部插入,但如果它作为头部插入则不会。我想,问题出在 inserthead-inserttail 连接或 delete tail 函数中,但找不到它。我会很感激你的帮助。
结构:
struct Element{
int value;
Element *prev, *next;
};
struct List2W{
Element *tail;
};
代码:
void insertHead(List2W& l, int x){
Element *new_head = new Element;
new_head->value=x;
if(isEmpty(l))
{
new_head->next=new_head;
new_head->prev=new_head;
l.tail=new_head;
}
else
{
new_head->next=l.tail->next;
new_head->prev=l.tail;
l.tail->next=new_head;
}
void insertTail(List2W& l, int x){
Element *new_tail = new Element;
new_tail->value=x;
if(isEmpty(l))
{
new_tail->next=new_tail;
new_tail->prev=new_tail;
}
else
{
new_tail->next=l.tail->next;
new_tail->prev=l.tail;
l.tail->next=new_tail;
}
l.tail=new_tail;
bool deleteTail(List2W& l, int &value){
if(isEmpty(l))
return false;
else if(l.tail->next==l.tail)
{
value=l.tail->value;
l.tail=NULL;
}
else
{
value=l.tail->value;
(l.tail->prev)->next=l.tail->next;
(l.tail->next)->prev=l.tail->prev;
l.tail=l.tail->prev;
}
return true;}
最佳答案
好的,所以我的插入头函数缺少一行,它应该连接 head 的 previous 和 new_head:
else
{
(l.tail->next)->prev=new_head; // here
new_head->next=l.tail->next;
new_head->prev=l.tail;
l.tail->next=new_head;
}
谢谢@nariuji,你让我重新分析了那个函数,感谢你的关注。除此之外,我只需要注意实际删除尾部以释放内存就可以了。
关于C++双向链表 "delete tail"函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36101028/