Отказ от ответственности: я очень начинающий программист, поэтому, если этот вопрос глуп, я прошу прощения. С недавним закрытием университетов я больше не могу обращаться за помощью к моим TA, поэтому inte rnet является следующей лучшей вещью.
У меня возникли некоторые проблемы при работе со связанными списками - в основном сортировка значений с вторичный указатель с использованием сортировки вставкой.
Список генерируется с номерами, используя указатель 'next', указывающий направление, я пытаюсь отсортировать список по случайно сгенерированному значению, содержащемуся в каждом элементе, с помощью 'sort1 'указатель, указывающий порядок отсортированных списков.
Проблемная область в коде, по-видимому, следующая: l oop:
while(new->value >= current->value && current != NULL){
current = current->sort1;
}
используется для go через элементы, которые уже отсортированы и найти, где должен быть расположен «новый» элемент, но я получаю ошибку ошибки сегментации здесь, я думаю, когда он достигает конца списка, и новый элемент должен быть помещен в конец списка, так текущий указатель указывает на ноль.
Есть понимание? TIA!
Код теста, для справки:
int main(){
int i, length;
Node *head, *current, *new, *sorthead;
head = NULL;
sorthead = NULL;
length = 5;
//create linked list
for(i=0;i<length; i++){
new = (Node*) malloc(sizeof(Node));
new->value = (int)rand_double(0,10);
new->sort1 = NULL;
new->next = head;
head = new;
}
//print list
current = head;
while(current != NULL){
printf("< %d >\n", current->value);
current = current->next;
}
//sort with sort 1
new = head;
while(new!=NULL){
if(sorthead == NULL || new->value < sorthead->value){
new->sort1 = sorthead;
sorthead = new;
}
else{
current = sorthead;
while(new->value >= current->value && current != NULL){
current = current->sort1;
}
new->sort1 = current;
current->sort1 = new;
}
new=new->next;
}
//print sorted
current = sorthead;
while(current != NULL){
printf("< %d >\n", current->value);
current = current->sort1;
}
return 0;
}