链表没有显示节点,请检查代码
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了链表没有显示节点,请检查代码相关的知识,希望对你有一定的参考价值。
这是双链接列表的代码,它编译无错误,但它只显示第一个节点的数据,而不是遍历任何其他节点。任何人都可以帮我。
#include<stdio.h>
#include<conio.h>
#include<malloc.h>
struct node
{
int data;
struct node *next,*prev;
};
struct node *head,*temp,*temp1;
void main(){
int c=1;
clrscr();
while(c)
{
temp=(struct node*)malloc(sizeof(struct node));
printf("enter the data for the node
");
scanf("%d",&temp->data);
if(head==NULL){
head=temp;
head->next=NULL;
head->prev=NULL;
}
else {
head->next=temp;
temp->prev=NULL;
temp->next=NULL;
}
printf("for new node enter 1 otherwise 0
");
scanf("%d",&c);
}
temp1=head;
while(temp1->next!=NULL){
printf("%d",temp1->data);
temp1=temp1->next;
}
getch();
}
答案
请找到更新的代码:
while(c)
{
temp=(struct node*)malloc(sizeof(struct node));
printf("enter the data for the node
");
scanf("%d",&temp->data);
if(head==NULL){
head=temp;
head->next=NULL;
head->prev=NULL;
temp1=head; // save head of linked list
}
else {
head->next=temp;
temp->prev=head; // make link to the previous list
temp->next=NULL;
head = head->next; // move head further
}
printf("for new node enter 1 otherwise 0
");
scanf("%d",&c);
}
while(temp1){ // print list while it is not null
printf("%d",temp1->data);
temp1=temp1->next;
}
另一答案
那是因为你这样做了。注意这3行
head->next=temp;
temp->prev=NULL;
temp->next=NULL;
你觉得你在这做了什么? head
的下一个节点将是新节点,然后你将这个新创建的节点的prev + next设置为NULL
。 (甚至没有正确使用双链接)。然后再次以相同的方式插入新创建的节点。想想以前添加的节点。它现在在哪里?那么没有指针指向它。是的,你失去了它。这被称为memory leak。所以你要做的就是在head
节点上添加一个额外的节点。
那么它应该打印两个节点?你又做错了。迭代的条件是temp1->next != NULL
所以理想情况下你会说,如果某个节点通过它的成员next
指向什么,你就不会考虑它用于打印。从字面上消除了该两个节点列表的最后一个节点被打印。
Here是一个例证。核实。是的,您将添加到此代码的两件事
- 检查
malloc
的返回值。 - 完成工作后释放节点。
以上是关于链表没有显示节点,请检查代码的主要内容,如果未能解决你的问题,请参考以下文章