附加到链表的末尾(C语言)

时间:2014-12-02 10:09:57

标签: c linked-list

void addToTree(SynTree *newNode){
    if(tree==NULL){
        tree=newNode;
        newNode->next=NULL;
    }else{
        SynTree *curr=tree;
        while(curr->next){
            curr=curr->next;
        }
        curr->next=newNode;
        newNode->next=NULL;
    }
}

我在其他地方使用的令人难以置信的基本c代码。它在while语句中陷入无限循环。当我用gdb调试时,它告诉我添加到树的第二个节点指向自身,从而导致无限循环。我的问题是,怎么样?也许我现在睡不着觉得工作,但我看不出有什么不对。

1 个答案:

答案 0 :(得分:0)

尽管函数编写得不是很好,但在函数列表中添加节点没有问题。

似乎问题是在向列表添加新节点时使用指向同一对象(可能是本地对象)的指针。您必须动态分配每个新节点。

我猜你的代码看起来像

SynTree node;

while ( condition )
{
   // set internal data members of the node

   addToTree( &node );
   //..
}

或者

while ( condition )
{
    SynTree node;

   // set internal data members of the node

   addToTree( &node );
   //..
}

而不是这种不正确的方法,你必须像

一样写
while ( condition )
{
   SynTree *node = malloc( sizeof( SynTree ) );
   // set internal data members of the node

   addToTree( node );
   //..
}

即添加到列表中的每个新节点都必须使用malloc进行分配,或者至少必须将函数指针传递给单独的对象。