Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;“双链表”;删除tail";功能_C++_Doubly Linked List_Unordered_Cyclic - Fatal编程技术网

C++ C++;“双链表”;删除tail";功能

C++ C++;“双链表”;删除tail";功能,c++,doubly-linked-list,unordered,cyclic,C++,Doubly Linked List,Unordered,Cyclic,我已经制作了单链接循环列表,它工作得很好,但是在这个例子中我遇到了这样的问题,如果我想删除tail,它会删除它,如果节点作为tail插入,但是如果它作为head插入,它不会删除。我猜想,问题在于inserthead inserttail连接或delete tail函数,但找不到它。我将感谢你的帮助 结构: struct Element{ int value; Element *prev, *next; }) 代码: } } 好的,我的inserthead函数缺少一行,它应该连接head的上

我已经制作了单链接循环列表,它工作得很好,但是在这个例子中我遇到了这样的问题,如果我想删除tail,它会删除它,如果节点作为tail插入,但是如果它作为head插入,它不会删除。我猜想,问题在于inserthead inserttail连接或delete tail函数,但找不到它。我将感谢你的帮助

结构:

struct Element{
int value;
Element *prev, *next;
})

代码:

}

}


好的,我的inserthead函数缺少一行,它应该连接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,你让我重新分析了这个函数,谢谢你的关注。除此之外,我只需要注意实际删除尾部以释放内存,应该没问题

好的,我的inserthead函数缺少一行,它应该连接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,你让我重新分析了这个函数,谢谢你的关注。除此之外,我只需要注意实际删除尾部以释放内存,应该没问题

哇,你甚至还费心画画。谢谢你。但我不明白你为什么说插入头部是不可能的。我看不出有任何错误,它似乎工作得很好。请你进一步解释一下为什么(1)不起作用?新建尾翼->下一步=左尾翼->下一步//对于新元素中的“下一个”,我指定了与尾巴相同的值,它指向头部,所以在这个新元素之后,尾巴->下一个应该指向l.tail->下一个(它是头部)哇,你甚至懒得画画。谢谢你。但我不明白你为什么说插入头部是不可能的。我看不出有任何错误,它似乎工作得很好。请你进一步解释一下为什么(1)不起作用?新建尾翼->下一步=左尾翼->下一步//对于新元素中的“下一个”,我指定了与尾部相同的值,它指向头部,因此在这个新元素之后,tail->next应该指向l.tail->next(它是头部)
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;}
void insertTail(List2W& l, int x) {
    // a part is omitted
    new_tail->next = l.tail->next;
    new_tail->prev = l.tail;
    l.tail->next = new_tail;
    (l.tail->next)->prev = new_tail;  // is this unnecessary?
}
 else
    {
        (l.tail->next)->prev=new_head; // here
        new_head->next=l.tail->next;
        new_head->prev=l.tail;
        l.tail->next=new_head;
    }