[英]C++ Doubly-linked list “delete tail” function
我已经制作了单链接的循环列表,它工作正常,但在这种情况下我遇到了这样的问题,如果我想删除尾部,它将删除它,如果节点作为尾部插入,但赢了'如果是作为头部插入的话。 我认为,问题在于inserthead-inserttail连接或删除尾部函数,但无法找到它。 我很感激你的帮助。
结构体:
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;}
好的,所以我的inserthead函数缺少一行,应该将head的前一行与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,你让我重新分析了这个功能,感谢你的兴趣。 除此之外,我只需要注意实际删除尾部以释放内存,应该没问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.