gpt4 book ai didi

c++ - 如何打印出双向循环链表?

转载 作者:行者123 更新时间:2023-11-28 02:29:03 38 4
gpt4 key购买 nike

所以我用 C 写了一个双向循环链表(无序)的代码,但我遇到了一个问题。我有打印元素的代码(从头开始):

void ShowListFromHead(List& l){
if(l.head==l.tail){
printf("%d", l.head->value);
return;
}
Element* p;
p=l.head;
while(p->next!= l.head){
printf("%d,", p->value);
p=p->next;}
}

除了尾部,它工作正常,因为 while 循环一直工作到它到达尾部(直到 p->next 是头部)。所以,这是我的问题:有没有办法在不排除任何元素的情况下显示整个列表?似乎无论我如何制定循环,总有一个元素被遗漏。使用 do/while 循环也不起作用。我尝试在最后一个元素的循环之后添加一个 printf,但它弄乱了代码中其他函数的功能。我试图解决这个问题几天,但仍然不知道如何解决,所以非常感谢您的帮助!

编辑我正在添加 deleteHead 函数,看来问题可能并不完全出在 show 函数上。

bool deleteHead(List& l, int &oldHead){
if(l.head!=NULL){
oldHead= l.head->value;
Element *p=l.head;
if(l.head->next!=NULL){
l.head=l.head->next;
l.head->prev=l.tail;
l.tail->next=l.head;
delete p;
return true;
}}
else if(l.head==NULL){
return false;
}
}

最佳答案

对原代码的修改:

void ShowListFromHead(List& l){
if(l.head == 0)
return;
Element* p = l.head;
do{
printf("%d,", p->value);
p=p->next;
}while (p != l.head);
}

void ShowListFromHead(List& l){
if(l.head == 0)
return;
Element* p = l.head;
do{
std::cout << p->value << ", " ;
p=p->next;
}while (p != l.head);
}

关于c++ - 如何打印出双向循环链表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29480106/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com