C++双向链表 "delete tail"函数

标签 c++ doubly-linked-list unordered cyclic

我已经制作了单链循环列表,效果很好,但在这种情况下我遇到了这样的问题,如果我想删除尾部,它会删除它,如果节点作为尾部插入,但如果它作为头部插入则不会。我想,问题出在 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/

相关文章:

c++ - 在m文件中包含mm文件

c++ - 如何在我的自定义列表迭代器类中将迭代器转换为 const_iterator?

Java:当我插入带有头虚拟节点的循环双向链表时,我的虚拟节点会被打乱。为什么?

java-8 - "unordered"如何帮助 "distinct()"和 "groupingBy"

C++ Unordered_map 与自定义类

CSS - 将 ul 元素悬停在垂直线上

c++ - 如何将容器的内容传递给 C++ 中的可变参数函数

android - 为什么双簧管中名为 OboeSinePlayer 的示例代码在 Android 上一直停止?

c - 以相反的顺序打印双向链表?

c++ - 在 printspooler API 中使用 SetJob 函数