没有在链接的列表的末尾正确插入新节点

时间:2017-12-13 00:41:01

标签: c list unix

我正在尝试从文件中读取的数据创建链接列表。 以下代码包含在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; 
    }

1 个答案:

答案 0 :(得分:0)

由于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;