题解 | #【模板】栈(头插链表入栈)#
【模板】栈
https://www.nowcoder.com/practice/104ce248c2f04cfb986b92d0548cccbf
#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct stack { int val; struct stack *next; } *Stack, stack; // 头插法入栈 void push(Stack *h, int val) { Stack p = *h; Stack s = (Stack) malloc(sizeof(stack)); s->val = val; s->next = p->next; p->next = s; // printf("%d\n", p->next->val); } // 输出栈顶,栈顶不出栈 void top(Stack h) { if (h->next == NULL) { printf("error\n"); return; } printf("%d\n", h->next->val); } // 输出栈顶,并让栈顶出栈 void pop(Stack *h) { Stack p = *h; if (p->next == NULL) { printf("error\n"); return; } printf("%d\n", p->next->val); p->next = p->next->next; } int main() { // 新建栈头 Stack h, s; h = (Stack) malloc(sizeof(stack)); h->next = NULL; int n; scanf("%d", &n); for (int i = 0; i < n; ++i) { char ope[10]; scanf("%s", ope); if (strcmp(ope, "push") == 0) { int val; scanf("%d", &val); push(&h, val); } else if (strcmp(ope, "pop") == 0) pop(&h); else if (strcmp(ope, "top") == 0) top(h); } return 0; }