gpt4 book ai didi

c - 你将如何迭代这个二维链表?

转载 作者:行者123 更新时间:2023-12-01 13:28:36 26 4
gpt4 key购买 nike

你会如何迭代这个二维链表?

typedef struct _NODE 
{
char *pszName;
unsigned long ulIntVal;
char *pszString;
struct _NODE *pNext;
struct _NODE *pDown;
} NODE;

我可以做这样的事情..

NODE *pHEad;

while (pHead != NULL) {
printf("%s", pHead->pDown->pszName);
pHead = pHead->pNext;
}

.. 但它只会给我每个下一个节点下的一个节点。如果它又是那个节点下的另一个节点怎么办?又在那个下面?或者如果有 pNext 附加到 pDown

最佳答案

在最简单的情况下,您可以使用类似于以下递归函数的函数:

void processNode(NODE *current) {
if (current != NULL) {
printf("%s", current->pszName);

processNode(current->pNext);
processNode(current->pDown);
}
}

int main(void) {
NODE *pHead;
/* ... Do something to fill your list ... */
processNode(pHead);
/* ... */
}

另请注意,这可能会导致函数调用的深度嵌套,具体取决于您处理的列表。因此,如果您使用的是堆栈大小有限的嵌入式系统,或者您正在处理巨大的列表,则可能会用完堆栈。在这种情况下,您应该找到另一种处理方法。

请注意,这将首先处理 pNext-list,然后开始处理最后一个节点的 pDown-list 的第一个节点。所以假设如下结构(右边是pNext,向下是pDown):

pHead -> p1 -------> p2
|- p1_1 |- p2_1 -> p2_1_1
\- p1_2 |- p2_2
\- p2_3 -> p2_3_1

它应该按以下顺序打印节点:

pHead, p1, p2, p2_1, p2_1_1, p2_2, p2_3, p2_3_1, p1_1, p1_2

关于c - 你将如何迭代这个二维链表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47109030/

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