链表没有显示节点,请检查代码

时间:2018-03-01 03:18:23

标签: c data-structures

这是双链接列表的代码,它编译无错误,但它只显示第一个节点的数据,而不是遍历任何其他节点。任何人都可以帮我解决。

gcloud

2 个答案:

答案 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;
}