c中的链表实现,运行时间错误
Linked list implementation in c, run time error
我编译代码没有报错,但是两次输入后程序在运行时崩溃了。也许有一些我无法辨认的逻辑错误。我试图在链表的尾部插入节点,同时只保持头部位置。
#include<stdio.h>
#include<stdlib.h>
struct Node{
int data;
struct Node* next;
};
struct Node *head;
//print the element of the lists
void print(){
printf("\nThe list from head to tail is as follows \n");
struct Node* temp = head;
while(temp!=NULL){
printf("\n %d ",(*temp).data);
temp = (*temp).next;
}
}
//insert a node at the tail of the linked list
void insert_at_tail(int data){
struct Node* temp = head;
struct Node* new_node = (struct Node*)malloc(sizeof(struct Node));
new_node->data=data;
new_node->next=NULL;
if(temp==NULL){
head=new_node;
}
else{
while(temp!=NULL){temp=temp->next;}
(*temp).next=new_node;
}
}
int main(){
head = NULL;
int i,data;
for(i=0;i<5;i++){
scanf("%d",&data);
insert_at_tail(data);
}
print();
return 0;
}
Maybe there is some logical error?
是的!
这里:
while(temp!=NULL) { temp=temp->next; }
(*temp).next=new_node;
你将循环直到 temp
实际上是 NULL
然后请求它的 next
成员,所以你正在请求 next
of NULL
,因此你这是自找麻烦(程序崩溃)!
尝试这样做:
while(temp->next != NULL) { temp=temp->next; }
循环的位置,直到 temp
指向列表的 last 节点。通过该更改,您的代码应该可以正常工作。
PS: Do I cast the result of malloc? 没有!
我编译代码没有报错,但是两次输入后程序在运行时崩溃了。也许有一些我无法辨认的逻辑错误。我试图在链表的尾部插入节点,同时只保持头部位置。
#include<stdio.h>
#include<stdlib.h>
struct Node{
int data;
struct Node* next;
};
struct Node *head;
//print the element of the lists
void print(){
printf("\nThe list from head to tail is as follows \n");
struct Node* temp = head;
while(temp!=NULL){
printf("\n %d ",(*temp).data);
temp = (*temp).next;
}
}
//insert a node at the tail of the linked list
void insert_at_tail(int data){
struct Node* temp = head;
struct Node* new_node = (struct Node*)malloc(sizeof(struct Node));
new_node->data=data;
new_node->next=NULL;
if(temp==NULL){
head=new_node;
}
else{
while(temp!=NULL){temp=temp->next;}
(*temp).next=new_node;
}
}
int main(){
head = NULL;
int i,data;
for(i=0;i<5;i++){
scanf("%d",&data);
insert_at_tail(data);
}
print();
return 0;
}
Maybe there is some logical error?
是的!
这里:
while(temp!=NULL) { temp=temp->next; }
(*temp).next=new_node;
你将循环直到 temp
实际上是 NULL
然后请求它的 next
成员,所以你正在请求 next
of NULL
,因此你这是自找麻烦(程序崩溃)!
尝试这样做:
while(temp->next != NULL) { temp=temp->next; }
循环的位置,直到 temp
指向列表的 last 节点。通过该更改,您的代码应该可以正常工作。
PS: Do I cast the result of malloc? 没有!