C 未在链接列表的末尾正确插入新节点
我正在尝试从文件读取的数据创建一个链表。 以下代码包含在while循环中。 似乎正确地拾取了数据,但没有正确地插入到列表中,因为当我尝试使用头部打印列表的数据时,我注意到头部似乎每次都在下一个节点上移动。 有人帮忙吗C 未在链接列表的末尾正确插入新节点,c,list,unix,C,List,Unix,我正在尝试从文件读取的数据创建一个链表。 以下代码包含在while循环中。 似乎正确地拾取了数据,但没有正确地插入到列表中,因为当我尝试使用头部打印列表的数据时,我注意到头部似乎每次都在下一个节点上移动。 有人帮忙吗 newNode = (struct node *)malloc(sizeof(struct node *)); newNode ->name=name; newNode->number=no; if(head == NULL){
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。这没有道理。嗨,谢谢你的回答,但我担心这并不能解决问题:(这和我已经有的差不多了:(我的版本和你的版本之间存在差异,基本上是你的第一行,我也理解你的版本应该如何工作,但我认为我发布的版本应该更容易调试,并且在我看来更容易理解。祝你好运,当你发现问题时,请告诉我!请尝试这个新的解决方案,然后重试。)我不知道!:)