当前位置:  开发笔记 > 编程语言 > 正文

为什么此链接列表会无限期地打印最后一个元素?

如何解决《为什么此链接列表会无限期地打印最后一个元素?》经验,为你挑选了1个好方法。

我正在完成一个Hackerrank挑战,包括将元素添加到链表并打印它.

输入具有以下格式:一组整数,其中第一个元素给出大小,其余元素是列表的组成部分.

我用Java完成了挑战,但我无法在C中完成.输入4 2 3 4 1应打印2 3 4 1,但我编码的这个片段给了我1 1 1 1 1 1 ... .{truncated}

我的方法:声明一个Node类型的新结构temp(数据输入为数据字段,下一个字段为NULL),然后以head为起点遍历链表,当它到达最后一个元素时,更改最后一个元素的下一个字段到当前元素的地址.

码:

 #include 
 #include  

   typedef struct Node{
   int data;
   struct Node* next;
    }Node;

 Node* insert(Node *head,int data)
  {       
    Node temp = {data, NULL} ;

     if (head == NULL)
      { head =&temp;
        return head;
      }

     else{

    Node* current = head ;
    while(current->next !=NULL)
      current = current->next ;

      current->next = &temp;

      return head;
       }
   }

void display(Node *head)
{
Node *start=head;
while(start)
{
    printf("%d ",start->data);
    start=start->next;
}
}

int main()
{
int T,data;
scanf("%d",&T);
Node *head=NULL;    
while(T-->0){
    scanf("%d",&data);
    head=insert(head,data);
            }

 display(head);

 }

dasblinkenli.. 5

列表节点必须动态分配.这个

Node temp = {data, NULL} ;

声明一个局部变量.在其声明函数范围之外引用其地址是未定义的行为.

用...来代替

Node *temp = malloc(sizeof(Node));
temp->data = data;
temp->next = NULL;

现在thtat temp是一个指针,表达式&temp也必须被替换temp.



1> dasblinkenli..:

列表节点必须动态分配.这个

Node temp = {data, NULL} ;

声明一个局部变量.在其声明函数范围之外引用其地址是未定义的行为.

用...来代替

Node *temp = malloc(sizeof(Node));
temp->data = data;
temp->next = NULL;

现在thtat temp是一个指针,表达式&temp也必须被替换temp.

推荐阅读
李桂平2402851397
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有