Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 未在链接列表的末尾正确插入新节点_C_List_Unix - Fatal编程技术网

C 未在链接列表的末尾正确插入新节点

C 未在链接列表的末尾正确插入新节点,c,list,unix,C,List,Unix,我正在尝试从文件读取的数据创建一个链表。 以下代码包含在while循环中。 似乎正确地拾取了数据,但没有正确地插入到列表中,因为当我尝试使用头部打印列表的数据时,我注意到头部似乎每次都在下一个节点上移动。 有人帮忙吗 newNode = (struct node *)malloc(sizeof(struct node *)); newNode ->name=name; newNode->number=no; if(head == NULL){

我正在尝试从文件读取的数据创建一个链表。 以下代码包含在while循环中。 似乎正确地拾取了数据,但没有正确地插入到列表中,因为当我尝试使用头部打印列表的数据时,我注意到头部似乎每次都在下一个节点上移动。 有人帮忙吗

    newNode = (struct node *)malloc(sizeof(struct node *));
    newNode ->name=name;
    newNode->number=no;

    if(head == NULL){
        head = newNode;
        head->next=NULL;
        temp=head;
    }

    else{
        newNode->next = temp->next;
        temp->next=newNode;
        temp=newNode; 
    }

因为head是列表的第一个节点,所以我看到的问题是在开始时正确地创建了newNode,if分支似乎工作正常。但是,else分支似乎是导致问题的分支,它应该如下所示:

if(head == NULL){
    head = newNode;
    head->next = NULL;
    temp = head;
} else {
    temp->next = newNode;
    newNode->next = NULL; //Since, as you said, the list is just reading from a file, the last element inserted will be the last of the list until a new one is read.
    temp = newNode; 
}
祝你好运,希望这有帮助

编辑: 尝试只输入一个指向newNode的指针,而不仅仅是newNode,您上面描述的问题似乎是每个元素都指向最后一个,这可以解决它:

if(head == NULL){
    head = newNode;
    head->next = NULL;
    temp = head;
} else {
    temp->next = *newNode;
    newNode->next = NULL;
    temp = newNode; 
}
PS:在你的版本中,应该是

temp->next=*newNode;

您是否尝试使用调试器单步执行代码?如果没有,这是您应该尝试的第一件事(也是迄今为止最有教育意义的一件事)。是的,我尝试过调试,我发现它确实第一次进入If语句,而head为null。休息时间进入else块,但当我试图打印头部指向的节点的数据时,不会给出每个时间的第一个节点的数据,而是当前节点的数据。看起来所有指针都在移动到当前节点,包括第一行else语句中的head。这没有道理。嗨,谢谢你的回答,但我担心这并不能解决问题:(这和我已经有的差不多了:(我的版本和你的版本之间存在差异,基本上是你的第一行,我也理解你的版本应该如何工作,但我认为我发布的版本应该更容易调试,并且在我看来更容易理解。祝你好运,当你发现问题时,请告诉我!请尝试这个新的解决方案,然后重试。)我不知道!:)