Я создал программу на C, чтобы найти точку пересечения двух связанных списков.Тем не менее, когда я запускаю его, у меня действительно возникает ошибка EXC_BAD_ACCESS (код = 1, адрес = 0x8) в функции «прыжки» в строку «shorttest_temp = shortest_temp-> next;»Вы знаете, как я могу соответствовать этому?спасибо!
struct Node{
int value;
struct Node *next;
};
int jumping(int diff, struct Node* longest_list, struct Node* shortest_list);
void push(struct Node** head_ref, int new_data){
struct Node* new_node = (struct Node*) malloc(sizeof(struct Node));
new_node->value = new_data;
new_node->next = *head_ref;
*head_ref = new_node;
}
int counter(struct Node* head){
int counter = 0;
struct Node* current = head;
while(current != NULL){
counter++;
current = current->next;
}
return counter;
}
int difference(struct Node* list_one, struct Node* list_two){
int diff;
if(counter(list_one)>counter(list_two)){
diff = counter(list_one) - counter(list_two);
return jumping(diff, list_one, list_two);
}
else{
diff = counter(list_two) - counter(list_one);
return jumping(diff, list_two, list_one);
}
}
int jumping(int diff, struct Node* longest_list, struct Node* shortest_list){
struct Node* longest_temp = longest_list;
struct Node* shortest_temp = shortest_list;
for(int i=0; i < diff ; i++){
longest_temp = longest_temp -> next;
i++;
}
while(longest_list != NULL && shortest_list !=NULL){
longest_temp = longest_temp->next;
shortest_temp = shortest_temp->next;
if(longest_temp == shortest_temp){
return shortest_list->value;
}
}
return -1;
}
int main(int argc, char* argv[]){
struct Node* list_one = NULL;
struct Node* list_two = NULL;
push(&list_one,4);
push(&list_one,5);
push(&list_two,1);
push(&list_two,2);
push(&list_two,3);
push(&list_two,4);
push(&list_two,5);
printf("difference: %d", difference(list_one,list_two));
return 0;
}
Спасибо!