【发布时间】:2016-03-31 04:50:52
【问题描述】:
我编写了将元素插入循环双向链表并显示这些元素的代码。我还应该能够从列表中删除尾节点,以及在列表中搜索特定元素。
这是我用于添加和打印的工作代码:
void Circular_DLList::add_to_tail(int a)
{
DLLNode *temp = new DLLNode;
temp->info = a;
if (is_empty()) {
tail = temp;
temp->next = tail;
temp->prev = tail;
}
else {
temp->next = tail->next;
temp->prev = tail;
tail = temp;
tail->prev->next = temp;
}
}
void Circular_DLList::print_list()
{
DLLNode *ptr;
ptr = tail->next;
do {
cout<< ptr->info << endl;
ptr = ptr->next;
}
while(ptr != tail->next);
}
无论我为 delete_from_tail 函数写什么,它都会导致分段错误:11。这是我对该函数的尝试(会引发错误)。
int Circular_DLList::delete_from_tail()
{
int a = tail->info;
if(tail == tail->next) {
delete tail;
tail = NULL;
}
else {
tail = tail->prev;
delete tail->next;
tail->next = NULL;
}
return a;
}
任何关于如何解决这个问题的建议都很棒。我已经尝试过调试,但我似乎无法弄清楚这个问题或者它与它的确切关系。 谢谢
【问题讨论】:
-
你知道循环链表的概念其实就是没有尽头吧?
-
@UsamaZafar 是的,但是我们正在使用一个名为 tail 的节点,所以这只是一种简单的表达方式。我将编辑帖子以澄清
-
删除本身是否会出现错误?我猜不是。我认为它是在删除后发生在打印上的吗?
-
@UsamaZafar 是的,你是对的,调试器告诉我它在调用 print 时发生,这就是为什么我不知道如何修复它
-
给我一点时间写下答案。
标签: c++ linked-list segmentation-fault doubly-linked-list circular-list