题解 | #【模板】栈#

【模板】栈

https://www.nowcoder.com/practice/104ce248c2f04cfb986b92d0548cccbf

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>

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

void push(LNode *h_node, int data);
int pop(LNode *h_node);
int top(LNode *h_node);

int main()
{
    int num;

    while(scanf("%d",&num)!=EOF)
    {
        // read command
        char command[5];
        int value;
        // result
        int result = 0;
        // list head
        LNode *h_node;
        h_node = (LNode *)malloc(sizeof(LNode));

        for(int i=0;i<num;i++)
        {
                scanf("%s", command);
                if(!strcmp(command, "push"))
                {
                        scanf("%d", &value);
                        push(h_node, value);
                }
                else if(!strcmp(command, "pop"))
                {
                        result = pop(h_node);
                        if(result==0){printf("error\n");}
                        else{printf("%d\n", result);}
                }
                else if(!strcmp(command, "top"))
                {
                        result = top(h_node);
                        if(result==0){printf("error\n");}
            else{printf("%d\n", result);}
                }
        }
    }
    return 0;
}

void push(LNode *h_node, int data)
{
    int counter = 0;
    LNode *p;
    p = h_node;
    // create new node
    LNode *new_node;
    new_node = (LNode *)malloc(sizeof(LNode));
    new_node->data = data;
    new_node->next = p->next;
    // add new node to list
    p->next = new_node;
}

int pop(LNode *h_node)
{
    LNode *p;
    LNode *d;
    p = h_node;
    d = h_node->next;
    // delete the last node and reture its data
    int result = 0;
    if(d)
    {
            result = d->data;
            p->next = d->next;
            free(d);
    }
    return result;
}

int top(LNode *h_node)
{
    LNode *p;
    int result = 0;
    p = h_node->next;
    if(p)
    {
        result = p->data;
    }
    return result;
}

为了支持多用例测试,需要允许多次输出。因此,读取输入指令时,需要像20行一样添加一个循环来判断输入是否结束。注意EOF在C语言中代表-1而不是0。

#C语言代码测试通过提交不通过的解决办法#
全部评论

相关推荐

想按时下班的大菠萝在...:隔壁学校的,加油多投, 实在不好找可以下个学期开学找,把算法八股准备好,项目有空再换换
投了多少份简历才上岸
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务