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

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的返回值。
  • 完成工作后释放节点。

以上是关于链表没有显示节点,请检查代码的主要内容,如果未能解决你的问题,请参考以下文章

回收站视图未显示在片段中

执行代码时有时不显示对话框片段

c语言,链表的反转,请写出代码,并讲解下,谢了!!!!!

删除链表中的节点后,打印节点列表显示已删除节点

PAT-链表-A1032 Sharing

NetBSD Make源代码阅读三:链表之插入查找删除与对每个节点应用函数