在C中展平多级双链表 - 对附加功能的怀疑

时间:2013-12-03 06:10:08

标签: c pointers linked-list

给出一个具有多个级别的双链表,例如:

enter image description here

我已经阅读了一本书中的解决方案,以便整理包含以下代码的列表:

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->prev = *tail;时我们正在改变它的价值我不明白为什么如果我们改变它在函数内部的值,我们不会将一个点传给child。

1 个答案:

答案 0 :(得分:0)

child未被更改。其成员prev已更改。

child->prev = *tail;

将更改child的{​​{1}}并对原始对象产生影响,因为它具有指向原始对象(其地址)的指针。

这就是它起作用的原因。