gpt4 book ai didi

c链表向后打印

转载 作者:太空宇宙 更新时间:2023-11-04 06:28:02 25 4
gpt4 key购买 nike

我正在尝试制作一个循环的双向链表,因此最后一个链接连接到第一个链接。但是,我无法弄清楚我在反向链接上做错了什么,因为我可以向前而不是向后打印我的列表。任何提示/帮助将不胜感激。

这是我的结构定义:

struct  NODE {
union {
int nodeCounter;
void *dataitem;
} item;

struct NODE *link;
struct NODE *backlink;
};

//function to create a list
struct NODE *InitList() {
struct NODE *temp = (struct NODE*)malloc(sizeof NODE);

temp->item.nodeCounter = 0;
temp->link = NULL;
temp->backlink = NULL;

return temp;
}

这是我的插入函数:

void  Add2List(struct NODE *start, struct NODE *NewNode) {
struct NODE *current = start;

while (current->link != NULL && current->link != start) {
current = current->link;
}
current->link = NewNode;

NewNode->link = start;
NewNode->backlink = current;
start->backlink = NewNode;

start->item.nodeCounter++;
}

这是我的反向打印功能:

void PrintBackwards(struct NODE *start) {
struct NODE * current = start;

while(current->backlink != start) {
DisplayNode((struct inventory*)current->item.dataitem);
current = current->backlink; //go one node back
}
}

最佳答案

您的其余函数看起来很合理,但在您的 PrintBackwards 函数中至少有两个错误。

  1. 如果您打算从末尾开始打印它,您应该从 start->backlink 开始,而不是 start

  2. 您不应该在 while 循环中检查 NULL,因为您的列表是循环的,所以不应该有 NULL

    <

下面的代码修复了这两个错误,但我不确定是否还有其他错误。

void PrintBackwards(struct NODE *start)
{

if(start == NULL || start->backlink == NULL)
return;
struct NODE * current = start->backlink;

while(current->backlink != start)
{
DisplayNode((struct inventory*)current->item.dataitem);
current = current->backlink; //go one node back
}

}

关于c链表向后打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23774227/

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