给定一个多层次的双向链表,如下所示:
我在一本书中阅读了一个解决方案,以便展平由以下代码组成的列表:
void FlattenList(node *head, node **tail)
{
node *curNode = head;
while (curNode) {
if (curNode->child) {
Append(cureNode->child, tail);
}
}
curNode = curNode->next;
}
/* Apends child to the end of list and updates tail
void Append(node *child, node **tail)
{
node *curNode;
/* Append child child list to the end */
(*tail)->next = child;
child->prev = *tail;
for(curNode = child; curNode->next; curNode = curNode->next) {
}
*tail = curNode;
}
typedef struct nodeT {
struct nodeT *next;
struct nodeT *prev;
struct nodeT *child;
int value;
} node;
我的问题是:为什么我们不在 APPend 函数中将 child 作为指针传递?我们在执行 child->prev = *tail;
时改变了它的值,我不明白如果我们在函数内部改变它的值,为什么我们不把一个点传递给 child。
最佳答案
child
没有被改变。其成员 prev
已更改。
child->prev = *tail;
将更改 child
的 prev
并将影响原始对象,因为它具有指向原始对象(其地址)的指针。
这就是它起作用的原因。
关于c - Flatten multi-level double linked list in C - 关于Append函数的疑惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20344092/