Я работаю над домашним заданием, где я беру размер списка, а затем элементы. Затем я вставляю их в порядке возрастания. Этот код имеет метод push и append, используя ссылку на указатель на голову. Если я использую вход, который уже в порядке возрастания, его тонкий, но нажатие на фронт может быть проблемой, так это то, как я изменяю headRef? Любая помощь оценивается.заказанный связанный список вставки
#include <stdio.h>
#include <stdlib.h>
typedef struct node item;
struct node{
int data;
struct node* next;
};
void insertFront(item** headRef, int new_data)
{
item* new_node = (item*) malloc(sizeof(item));
new_node->data = new_data;
new_node->next = (*headRef);
(*headRef) = new_node;
}
//using reference to pointer adds to end
void insertEnd(item** headRef, int new_data)
{
item* new_node = (item*) malloc(sizeof(item));
//pointer head for iterating through list
item* last = *headRef;
new_node->data = new_data;
new_node->next = NULL;
if (*headRef == NULL)
{
*headRef = new_node;
return;
}
while (last->next != NULL)
last = last->next;
last->next = new_node;
return;
}
//utility function to insert data sorted
void insert_sorted_linked_list(item* head, int val){
if(val > head->data){
insertEnd(&head, val);
}
else{
insertFront(&head, val);
}
}
void printList(item *node)
{
while (node != NULL)
{
printf("%d ", node->data);
node = node->next;
}
printf("\n");
}
int main(){
printf("Enter in size of the list followed by as many elements: ");
int size;
scanf("%d", &size);
int elements[size];
int i = 0;
for(i=0; i<size; i++){
scanf("%d", &elements[i]);
}
item *head = NULL;
//makes sure the list is not null
insertEnd(&head, elements[0]);
//iterates to populate list
for(i = 1; i < size; i++){
insert_sorted_linked_list(head, elements[i]);
}
printList(head);
return 0;
}
Какая ошибка? в чем проблема, с которой вы сталкиваетесь? – jester
Извините, когда я использую образец ввода 3 321, он должен вставлять в список по порядку и выводить 1 2 3, но если я использую указанный вход, он выводит только 3. – ASH
'insertEnd (& head, val);' 'head 'здесь является локальным параметром, поэтому хранится в стеке, т. е. будет обладать функцией, поэтому адрес' head' ('& head') недопустим внутри функции' insertEnd'. То, что вы получаете, - это неопределенное поведение. –