我最近研究了链表并尝试创建一个推送和弹出功能。
我已经成功创建了一个看起来像这样的。
#include <stdio.h>
#include <stdlib.h>
struct node{
int data;
struct node *next;
};
struct node* buffer = NULL;
void push(int elem){
struct node *new_element = (struct node*)malloc(sizeof(struct node));
new_element->next = buffer;
new_element->data = elem;
buffer = new_element;
}
int pop(void){
int elem = buffer->data;
struct node *eliminate = buffer;
buffer = eliminate->next;
free(eliminate);
return elem;
}
后来我尝试用这种方式打印它们:
int main(void) {
push(5);
push(7);
push(8);
pop();
printf("%d %d", buffer->data, buffer->next->data);
}
但是,结果是 7 5
而不是 5 7
。我的推送功能有问题吗?
最佳答案
之后:
push(5);
push(7);
push(8);
您有以下链表:
5 <- 7 <- 8 <- 缓冲区
弹出后你有:5 <- 7 <- buffer
这就是为什么 buffer->data
为 7 而 buffer->next->data
为 5 的原因。
为了以正确的顺序打印列表,您需要一个指向第一个节点的指针。在你的情况下是 5。同样,你的方法应该使它成为一个双链表。
struct node{
int data;
struct node *next;
};
struct node* start = NULL;
struct node* buffer = NULL;
void push(int elem){
struct node *new_element = (struct node*)malloc(sizeof(struct node));
new_element->next = buffer;
new_element->data = elem;
if (buffer == NULL) start = new_element; // this is the magic
buffer = new_element;
}
关于c - 我在 C 中创建了一个 push 和 pop 函数,但不知道如何按顺序打印它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65185356/