我是数据结构的新手,只是没有得到链表的工作,所以我自己创建了一个链表,它与书中的不同,但是不能理解我的代码中的问题在哪里不是退出。需要纠正的是什么 这是我的代码
struct node{
int data;
struct node* next;
};
void addAtBegining(int data,struct node* head){
struct node* new_node = (struct node*)malloc(sizeof(struct node));
new_node->data = data;
new_node->next = head->next;
head->next = new_node;
}
void display(struct node* head){
while(head->next!=NULL){
head = head->next;
printf("%d ",head->data);
}
}
void main(){
struct node* list = NULL;
addAtBegining(2,list);
addAtBegining(3,list);
addAtBegining(4,list);
addAtBegining(5,list);
addAtBegining(6,list);
display(list);
}
答案 0 :(得分:2)
未定义的行为:您有struct node* list = NULL
,但随后将list
传递给addAtBegining
,head
会在参数head->next
中收到,然后执行head
。
无论
struct node* list = (struct node *) malloc (sizeof (struct node));
list->data = 0xdeafbabe;
list->next = NULL;
例如,您可以执行以下操作
npm install axios promise.prototype.finally --save
然后使用现有代码。
这样做只是为了一个带有垃圾数据的虚拟头节点。因为您的打印例程无论如何都会跳过头节点。这样可以正常工作。
答案 1 :(得分:1)
您忘了初始化struct node* list = NULL;
。可以使用以下代码修复此更改struct node* head = (struct node*)malloc(sizeof(struct node));
head->data = 0;
head->next = NULL;
struct node* list = head;
:
$("my Ele")
.hammer()
.on('tap', function(e){
// do something
})
答案 2 :(得分:1)
你没有在代码中设置头指针。所以这个指针在其他功能中无法识别。
struct node{
int data;
struct node* next;
}*head;
// you dont need to put the head pointer in the parameters if you just add in the beginning of the single linked list.
void addAtBegining(int data){
struct node* new_node = (struct node*)malloc(sizeof(struct node));
// if head is empty then set the head first.
if(head==NULL){
head = new_node;
head->data = data;
head->next = NULL;
return;
}
// if head is not empty then set the new_node->data and set that node as the new head
new_node->data = data;
new_node->next = head;
head = new_node;
}
void display(struct node* head){
while(head!=NULL){
printf("%d ",head->data);
head = head->next;
}
}