C - 动态链接列表,链接有问题



我正在尝试使用指针将结构添加到已经创建的节点。问题是我没有正确链接它们。我希望有人能帮助我。参数是正确的,一个是结构体,另一个是字符串,它将进入我新创建的与结构体 s 连接的结构。

(节点 s)--->(新节点)-->空我尝试调用 fileInsert(),当我尝试查看新节点中的数据时,它仍然是空的。文件名是指向链接节点 S 和我的新节点的结构节点指针。有人可以指出我正确的方向吗?

void fileInsert(struct node *s, char *filename){
struct node *current=s->filenames;
while(current!=NULL){
    current=current->filenames;
}
struct node* f=NULL;
f=(struct node*)malloc(sizeof(struct node));
strcpy(f->data, filename);
current=f;
f->filenames=NULL;
}

有两种方法可以做到这一点。

一种是将新节点作为列表的开头:

struct node* fileInsert(struct node *s, char *filename) {
    struct node *current=s;
    struct node* f=NULL;
    f=(struct node*)malloc(sizeof(struct node));
    strcpy(f->data, filename);
    f->filenames=current;
    return f;
}

另一种是将其附加到当前列表中,这是您可能正在尝试执行的操作。

struct node* fileInsert(struct node *s, char *filename) {
    struct node *current=s;
    if (current != null) {
        while(current->filenames!=NULL){ 
            current=current->filenames;
        }
    }
    struct node* f=NULL;
    f=(struct node*)malloc(sizeof(struct node));
    strcpy(f->data, filename);
    f->filenames=NULL;
    if (current == null) {
        current = f;
    } else {
        current->filenames = f;
    }
    return current;
}

第一个只是创建一个新节点,然后指向当前节点,将其添加到前面。如果当前是节点或 null,则此方法有效。

第二个检查列表是否存在,如果存在,它将转到列表的末尾(通过在文件名中查找空指针)并添加新节点,如果不存在,它将使新节点成为根节点

这两个例程都返回列表的开头。

你多次给局部变量"current"分配一些值,然后你的函数退出,你永远失去这个变量。相反,您需要做的是找到最后填充的成员并为其成员文件名分配一个值,指向新分配的结构。

将循环更改为

while ( current != null && current->filename != null)

发生的事情是当前变为空,但空是地址0x0所以你没有链接任何thinf。您希望在最后一个非空节点处停止

编辑:像这样想

NODE1 -> NODE2 -> NODE3 -> NULL
     ^ current

当您遍历循环时,正在发生的事情是

NODE1 -> NODE2 -> NODE3 -> NULL
         ^ current 

NODE1 -> NODE2 -> NODE3 -> NULL
                                                 ^ current

当前是一个不是真正有形的内存地址。没有物理意义。当您重新刷新 NULL 时,您将丢失有关节点 1 到节点 3 的所有信息。

当您添加节点时,您会得到这个

NODE1 -> NODE2 -> NODE3 -> NULL
NODE4->NULL

两者都存在于内存中但未连接

很抱歉我的手机上格式化错误

im

相关内容

  • 没有找到相关文章