我一直在努力为delete function
实施singly linked list
。
我的实施如下。
typedef struct singly_linked_list{
int data;
struct singly_linked_list *next;
}sll;
删除第一个节点的功能如下:
void delete_node_from_front(sll ** head){
sll ** temp;
*temp = *head;
(*head) = (*head)->next;
(*temp)->next = NULL;
free_node(temp);
}
我调用此函数的另一个函数:
void delete_node_from_given_pos(sll ** head, int pos){
int i = 1;
sll * temp;
sll * prev;
temp = *head;
prev = *head;
if(pos == 1){
delete_node_from_front(head);
}
else{
while(temp != NULL && i < pos){
i++;
prev = temp;
temp = temp->next;
}
if(temp != NULL){
prev->next = temp->next;
temp->next = NULL;
free_node(&temp);
}
else{
printf("Node with given position is not present");
}
}
}
这个实现给了我segmentation fault
。
但是,如果我通过以下代码替换delete_node_from_front()
的实现中的函数调用delete_node_from_given_pos()
(*head) = (*head)->next;
temp->next = NULL;
free_node(&temp);
计划runs perfectly
。我称之为fucntion的方式:
sll * head;
head = NULL;
int arr[_SIZE]=_ELEMENT;
create_list(&head, arr, _SIZE);
delete_node_from_given_pos(&head, 1);
print_list(head);
print_list
功能
void print_list(sll * head){
int i = 0;
while(head != NULL){
printf("%d ", head->data);
head = head->next;
}
printf("\n");
}
free_node
函数的实现:
void free_node(sll ** head){
free(*head);
}
这种行为的可能原因是什么?