У меня есть задание написать некоторые функции, связанные со связанными списками. Функции:
insertFront - поставить новый узел в начало списка
insertBack - поставить новый узел в конец списка
печать - распечатать текущий связанный список
Макс. - вернуть максимальное значение в списке
Min - вернуть минимальное значение в списке
locInList - вернуть номер местоположения в списке
Я выполнил свой код и подумал, что он будет работать, но продолжаю сталкиваться с ошибкой сегментации. Я знаю, что это означает, что я пытаюсь получить доступ к части памяти, которая не существует. Я не могу понять, что я делаю неправильно.
Я пробовал разделять и комментировать функции, и кажется, что программа работает нормально, пока я не нажму на функцию печати. Функция печати не печатает должным образом, и я предполагаю, что ошибка сегментации возникает в моих функциях max min и locInList. Нет сообщений об ошибках от компилятора.
#include <stdio.h>
#include <stdlib.h>
struct node
{
int data;
struct node *next;
};
typedef struct node node;
node* insertFront(node* head, int d);
node* insertBack(node* head, int d);
void print(node* head);
int max(node* head);
int min(node* head);
int locInList(node* head, int x);
int main()
{
node* head = NULL;
head = insertFront(head, 5);
head = insertFront(head, 4);
head = insertBack(head, 6);
head = insertBack(head, 7);
print(head);
printf("Max: %d\n", max(head));
printf("Min: %d\n", min(head));
printf("locInList 5: %d\n", locInList(head, 5));
printf("locInList 9: %d\n", locInList(head, 9));
return 0;
}
node* insertFront(node* head, int d)
{
node *tmp = NULL;
tmp = malloc(sizeof(node));
tmp->data = d;
tmp->next = head;
head = tmp;
return head;
}
node* insertBack(node* head, int d)
{
node *tmp = malloc(sizeof(node));
tmp->data = d;
tmp->next = NULL;
if(head == NULL) return tmp;
node *end = head;
while(end->next != NULL){
end = end->next;
}
end->next = tmp;
return head;
}
void print(node* head)
{
node *tmp = head;
while(tmp != NULL){
printf("%d ", tmp->data);
tmp = tmp->next;
}
}
int max (node* head)
{
int max = 0;
node *tmp = NULL;
tmp = head;
while(tmp->next != NULL){
if(tmp->data >= max){
max = tmp->data;
tmp = tmp->next;
}
}
return max;
}
int min (node* head)
{
int min = head->data;
node *tmp = NULL;
tmp = head;
while(tmp != NULL){
if(tmp->data <= min){
min = tmp->data;
tmp = tmp->next;
}
}
return min;
}
int locInList(node* head, int x)
{
int i = 0;
node *tmp = NULL;
tmp = head;
while(tmp != NULL){
if(tmp->data == x){
return i;
}else{
i++;
tmp = tmp->next;
}
}
return i;
}