这是双链接列表的代码,它编译无错误,但它只显示第一个节点的数据,而不是遍历任何其他节点。任何人都可以帮我解决。
gcloud
答案 0 :(得分:1)
那是因为你这样做了。注意这3行
head->next=temp;
temp->prev=NULL;
temp->next=NULL;
你觉得你在这做了什么? head
的下一个节点将是新节点,然后您已将此新创建节点的prev + next设置为NULL
。 (甚至没有正确使用双链接)。然后再次以相同的方式插入新创建的节点。想想以前添加的节点。它现在在哪里?那么没有指针指向它。是的,你失去了它。这称为memory leak。所以你要做的就是在head
节点添加一个额外的节点。
那么应该打印两个节点吗?你又做错了。迭代的条件是temp1->next != NULL
,所以理想情况下,如果某个节点通过它的成员next
指向任何内容,则您不会将其视为打印。这实际上消除了该两个节点列表的最后一个节点的打印。
Here就是一个例证。核实。是的,您将添加到此代码的两件事
malloc
。答案 1 :(得分:0)
请找到更新的代码:
while(c)
{
temp=(struct node*)malloc(sizeof(struct node));
printf("enter the data for the node\n");
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\n");
scanf("%d",&c);
}
while(temp1){ // print list while it is not null
printf("%d",temp1->data);
temp1=temp1->next;
}