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

  • 本文关键字:语言 链表 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 调试时,它告诉我添加到树中的第二个节点指向自身,从而导致无限循环。我的问题是,如何?也许我现在睡眠不足而无法工作,但我看不出出了什么问题。

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

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

我可以猜到你的代码看起来像

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 );
   //..
}

也就是说,添加到列表中的每个新节点都必须使用 using malloc 进行分配,或者至少您必须传递给函数指针以分隔对象。

相关内容

  • 没有找到相关文章

最新更新