我正在使用 C 语言中的 Linked_list 实现堆栈。我已经成功创建了第一个节点。当我尝试在第一个位置动态添加更多节点时,因为堆栈遵循 LIFO 原则,我相信我没有正确链接指针,因此链接列表的顺序保持不变。代码非常简单,如下所示,我只需要理解,当我尝试打印整个链表时,它只打印第一个节点的数据。看起来整个链在第一个节点之后就断裂了。我哪里出错了?
// Implementation of stack using a linked-list
#include<stdio.h>
#include<stdlib.h>
typedef struct sllnode
{
int data;
struct sllnode *next;
}
stack;
void create(stack *head, int elem)
{
head -> data = elem;
head -> next = NULL;
}
void insert(stack *head, int elem)
{
stack *newNode = malloc( sizeof(stack) );
newNode -> data = elem;
newNode -> next = head;
head = newNode;
}
void display(stack *head)
{
if( head == NULL )
{
printf(" NULL value returned \n");
}
stack *ptr = head;
while(ptr != NULL)
{
printf("%d \n", ptr -> data);
ptr = ptr -> next;
}
}
int main(void)
{
stack *head = malloc( sizeof(stack) );
create(head, 10);
insert(head, 15);
insert(head, 25);
insert(head, 26);
insert(head, 27);
insert(head, 28);
display(head);
}
最佳答案
这个函数:
void insert(stack *head, int elem) {
stack *newNode = malloc( sizeof(stack) );
newNode -> data = elem;
newNode -> next = head;
head = newNode;
}
修改 head
的本地副本。
应该是:
void insert(stack **head, int elem) {
stack *newNode = malloc( sizeof(stack) );
newNode -> data = elem;
newNode -> next = *head;
*head = newNode;
}
并调用为insert(&head,elem);
。
为了更清楚为什么不:
void create(stack **head){
*head=NULL;
}
而不是在代码主体中分配空间。
还有
void destroy(stack** head){
while(*head!=NULL){
stack* next=(*head)->next;
free(*head);
*head=next;
}
}
关于c - 我在 C 语言中使用链表实现堆栈数据结构时被困在这里,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48262143/