C中没有程序输出

时间:2012-11-29 07:46:38

标签: c

#include<stdio.h>
#include<malloc.h>

typedef struct node_t {
    int i;
    struct node_t* link;
} node;

node* head = NULL;

int main() {
    int i = 10;
    node* temp = NULL;
    head = (node *)malloc(sizeof(node));
    temp = (node *)malloc(sizeof(node));
    if(temp == NULL) {
        printf("\n malloc for temp node failed! \n");
    }
    else {
        /* linked list logic to add the elements in the beginning */
        while(i<=10) {
            temp->i = i;
            temp->link = NULL;
            if(head == NULL) {
                head = temp;
            }
            else {
                temp->link = head;
                head = temp;
            }
            i++;
        }
    }
    for(temp = head; temp->link != NULL; temp = temp->link) {
        printf("\n The data is:%d \n",temp->i);
    }
    free(temp);
    free(head);
    return 0;
}

我正在尝试一个简单的链接列表程序。我没有得到输出。

5 个答案:

答案 0 :(得分:2)

你似乎有一个无限循环! (i的值没有改变)

答案 1 :(得分:2)

1)每次为tmp赋值时,都必须分配节点(tmp)。并且不只分配一次tmp。请参阅以下固定代码以了解如何操作

2)以下for循环错误:

for(temp = head; temp->link != NULL; temp = temp->link) {

for循环在以下代码中修复

3)对于free,您必须浏览整个链表,然后释放每个节点。请参阅以下固定代码。

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>

typedef struct node_t{
    int i;
     struct node_t* link;
}node;

node* head = NULL;

int main(){
     int i = 1;
     node* temp = NULL;

     /* linked list logic to add the elements in the beginning */
     while(i<=10){
         temp = (node *)malloc(sizeof(node));
         if(temp == NULL){
             printf("\n malloc for temp node failed! \n");
             exit(1);
         }
         temp->i = i;
         temp->link = NULL;
         if(head == NULL){
             head = temp;
         }
         else{
             temp->link = head;
             head = temp;
         }
         i++;
     }

     for(temp = head; temp != NULL; temp = temp->link){
         printf("\n The data is:%d \n",temp->i);
     }

     while (head!=NULL)
     {
        temp = head->link;
        free(head);
        head = temp;
     }

}

答案 2 :(得分:1)

您没有在while循环中更改变量i的值,因此您永远不会退出while循环。

您需要以下内容:

int i=1;
while(i<=10){
  // insert i in loop
  i++;
}

答案 3 :(得分:1)

您没有更改循环变量的值,即i

此外,您需要在while循环中执行malloc以创建单独的节点。现在,您的代码一次又一次地修改同一节点。

答案 4 :(得分:1)

除了关于无限循环的节点之外,由于你永远不会修改i的值,所以还有其他错误。

 22         /* linked list logic to add the elements in the beginning */
 23         while(i<=10){
 24             temp->i = i;
 25             temp->link = NULL;
 26             if(head == NULL){
 27                 head = temp;
 28             }
 29             else{
 30                 temp->link = head;
 31                 head = temp;

看看你在这个循环中做了什么。如果head是NULL(它不太可能,因为你在第15行中分配了它,尽管分配可能会失败)你将'head'设置为temp。

如果head不为NULL,则将temp的'link'设置为head。然后你设定为临时。然后你循环再做一遍。

所以你最终指向temp,temp-&gt;链接指向temp ...一个正好一个节点的循环列表。

请改为尝试:

int main()
{   
    int i = 0;
    node *temp;

    /* linked list logic to add the elements in the beginning */
    while(i != 10) 
    {
        /* First, allocate a new node */
        temp = (node *)malloc(sizeof(node));

        if(temp == NULL) 
            return -1; /* yikes */

        /* now set its value */
        temp->i = i++;

        /* and link it into the list, at the beginning */
        temp->link = head;
        head = temp;        
     }

     /* Now traverse the list, starting from 'head' */
     temp = head;

     while(temp != NULL)
     {
        /* save the current node in a temporary variable */
        node *temp2 = temp;

        /* and move 'temp' to point to the next node in the list */
        temp = temp->link;

        /* print the current node */
        printf("\n The data is: %d\n", temp2->i);

        /* and free the memory */
        free(temp2);
     }   

     return 0;
}