程序的内容为什么不打印任何结果?

时间:2014-04-24 06:12:20

标签: c

struct node{
    int data; struct node *next;
};

void push(struct node* head, struct node* n){
    if(n!= NULL){
        if(head==NULL)
            head = n;
        else {
            n->next = head;
            head = n;
        }
    } else printf("Cannot insert a NULL node");
}

struct node* pop(struct node* head){
    if(head!=NULL){
        struct node *n = head;
        head = head->next;
        return n;
    } else {
        printf("The stack is empty");
        return NULL;
    }
}

int main(){
    int i;
    struct node *head = NULL, *n;
    for(i=15;i>0;i--){
        struct node *temp = malloc(sizeof(struct node));
        temp -> data = i;
        temp->next = NULL;
        push(head,temp);
    }
    n = head;
    while(n!=NULL){
        printf("%d ",n->data);
        n=n->next;
    }
    return 0;
}

2 个答案:

答案 0 :(得分:5)

您需要将指针头的地址传递给函数push。我的情况是头部没有被修改,因为你只是传递头部的值。

  void push(struct node** head, struct node* n){
if(n!= NULL){
    if(*head==NULL)
        *head = n;
    else {
        n->next = *head;
        *head = n;
    }
} else printf("Cannot insert a NULL node");}


int main(){
int i;
struct node *head = NULL, *n;
for(i=15;i>0;i--){
    struct node *temp = (struct node *)malloc(sizeof(struct node));
    temp -> data = i;
    temp->next = NULL;
    push(&head,temp);
}
n = head;
while(n!=NULL){
    printf("%d ",n->data);
    n=n->next;
}
return 0;}

答案 1 :(得分:3)

您将head指针按值传递给函数push(head,temp);。在head内完成的push更改不会反映在main()函数中。

您应将head的地址传递给push()

push(&head, temp);

push()内部:

*head = n;

pop()需要进行类似的更改。您可以通过printf中的main()中的printf("%p\n", head);添加head来验证我的意思。\nprintf的值将保持不变。

顺便说一下,最好在stdout内的语句末尾添加stdout,它会立即刷新{{1}}流,因此您的输出会立即打印在{{1}上(你的电脑屏幕)。