我有这个功课要求我使用动态分配制作堆栈并在其中添加一些不同的功能。现在,通常我会将头指针用作全局变量并使我更容易,但是功课要求我将头指针作为参数赋予函数,所以我在main中创建了局部变量。这是代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
int val;
struct node * next;
} node;
void push(int val, node *head) {
node* temp = (node*) malloc(sizeof(node));
node* current = head;
temp->val = val;
if (head == NULL) {
head = temp;
temp->next = NULL;
}
else {
while (current->next != NULL) {
current = current->next;
}
current->next = temp;
temp->next = NULL;
}
}
void print(node *head) {
node* current = head;
if (current->next != NULL) {
while (current->next != NULL) {
printf("%d", current->val);
current = current->next;
}
}
else {
printf("%d", current->val);
}
}
int main() {
node * head = NULL;
int n;
scanf("%d", &n);
push(n, head);
print(head);
push(n, head);
print(head);
push(n, head);
print(head);
}
我在print(head = 0x0)
的第一个打印(头部)函数中得到了一个分段错误错误,这让我相信当head返回main时它不会更新。在第一个推送功能之后我使用printf()
作为头部,我是对的,头部返回0
。问题是:如何在函数中返回更新的头?
答案 0 :(得分:4)
您可以声明您的功能
void push(int val, node **head)
然后传递你的头部参考并修改它
或
node *push(int val, node *head)
并返回新头。