动态链表,链接有问题

时间:2013-11-09 01:15:56

标签: c pointers memory struct linked-list

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

(node s)--->(新节点) - > null 我试图调用fileInsert(),当我尝试在新节点中查看数据时,它仍然为null。 filenames是指向链接节点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;
}

3 个答案:

答案 0 :(得分:2)

两种方法。

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

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;
}

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

第二个检查列表是否完全存在,如果存在,它将进入列表的末尾(通过查找文件名中的空指针)并添加新节点,如果不存在则会创建新节点节点根节点

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

答案 1 :(得分:1)

您正在多次为 local 变量'current'分配一些值,然后您的函数退出并永远松开该变量。您需要做的是找到最后填充的成员并为其成员文件名分配一个值,指向新分配的结构。

答案 2 :(得分:0)

将循环更改为

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

发生的事情是当前变为null但是null是地址0x0所以你没有链接anythinf。您想要停在最后一个非空节点

编辑:想象一下这个

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

当你遍历你的循环时,发生了什么

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

...

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

当前是一个内存地址并不是真的有形。没有物理意义。当你reaxh NULL

时,你失去了关于node1到node3的所有iinformatin

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

NODE1 -> NODE2 -> NODE3 -> NULL

NODE4->NULL

都存在于内存中但未连接

抱歉我的手机格式错误