#include <stdio.h>
#include <stdlib.h>
typedef struct node{
int data;
struct node *next;
}node;
void init(node* head, node* tail){
head = (node*)malloc(sizeof(node));
tail = (node*)malloc(sizeof(node));
head->next = tail;
tail->next = tail;
}
void push(node* head, int data){
node *temp;
temp = (node*)malloc(sizeof(node));
if(temp == NULL){
printf("%s", "Out Of Memory");
}else{
temp->data = data;
temp->next = head->next;
在下一行,有printf方法打印7号。 它是用于调试的。但这种printf方法并没有奏效。所以我注意到了
temp->next = head->next;
此代码有错误。但我找不到原因.. 我在考虑内存分配问题。但仍然没有得到它......!
printf("%d", 7);
head->next = temp;
printf("push (%d)", data);
}
}
void main(){
node* head = NULL;
node* tail = NULL;
init(head, tail);
push(head, 10);
}
答案 0 :(得分:3)
void init(node** head, node** tail){
*head = malloc(sizeof(node));
*tail = malloc(sizeof(node));
(*head)->next = *tail;
(*tail)->next = *tail;
}
void main(){
node* head = NULL;
node* tail = NULL;
init(&head, &tail);
push(head, 10);
}
你应该通过引用传递head和tail来反映调用函数main()中head和tail的更改值。
有关传递参考的更多信息,请检查this
答案 1 :(得分:1)
1)您不需要也不需要初始化功能。 head
为NULL时,堆栈被视为空。所以head = NULL;
就足够了。
2)堆栈不需要tail
指针,因为元素总是在前面插入/移除
3)您的push
函数必须允许更新head
一种方法是返回新头。另一种方法是将指针传递给head
4)链接列表没有tail->next = tail;
当next
为NULL时,到达列表的末尾。因此,如果您有tail
,那么tail->next = NULL;
使用&#34;返回新头的堆栈&#34;更像是:
node* push(node* head, int data){
node *temp = malloc(sizeof(node));
if(temp == NULL){
printf("%s", "Out Of Memory");
return head;
}
temp->data = data;
temp->next = head; // notice this
return temp;
}
int main(){
node* head = NULL;
head = push(head, 10);
return 0;
}
使用&#34;堆栈将指针传递给头部&#34;更像是:
void push(node** headPtr, int data){
node *temp = malloc(sizeof(node));
if(temp == NULL){
printf("%s", "Out Of Memory");
return;
}
temp->data = data;
temp->next = *headPtr; // notice the *
*headPtr = temp;
}
int main(){
node* head = NULL;
push(&head, 10); // notice the &
return 0;
}
答案 2 :(得分:1)
您可以从代码中一起删除init函数,并且不需要尾部。 如果要将其用于调试,则main可能如下所示。
node* head = NULL;
node* tail = NULL;
head = (node*)malloc(sizeof(node));
tail = (node*)malloc(sizeof(node));
head->next = tail;
tail->next = tail;