Я очень новичок в программировании. Попытка написать функцию, которая получает головку списка + данные, которые нужно вставить, и возвращает новый заголовок списка. Я много сделал с добавлением элемента в голову списка, но по какой-то причине я не могу обмануть эту небольшую разницу.C: Enqueue() - Вставка в конец связанного списка, возврат главы списка
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
typedef struct node_{
int data;
struct node_ *next;
} Queue;
int main(void){
Queue* queue = NULL;
queue = enqueue(queue, 1);
assert(queue->next == NULL);
assert(queue->data == 1);
queue = enqueue(queue, 2);
assert(queue->data == 1);
assert(queue->next != NULL);
assert(queue->next->data == 2);
free(queue->next);
free(queue);
return 0;
}
Queue *enqueue(Queue *queue, int data){
Queue *new_node, *p;
new_node = malloc(sizeof(Queue));
new_node->data = data;
new_node->next = NULL;
p = queue;
while(p->next != NULL){
p = p->next;
}
p->next = new_node;
return ??????
}
Я знаю, что вставить в голову, вы можете:
new_node->data = data;
new_node->next = queue;
return new_node;
Извинения, если то, что я написал выше, не имеет особого смысла. Я довольно устал, и я провел немало итераций. Вероятно, пропало что-то очевидное.
Итак, если (queue == NULL) возвращает new_node, правильно? Но как насчет следующей части? Все еще немного смущен. Будет ли мне все еще нужен цикл while для перехода по списку? Как только queue-> next == NULL, возвращает очередь? Но, er, сначала установите queue = new_node? * царапины голова * Извините за плотный! Спасибо, что пытались помочь! – AzathothM
Если очередь пуста, то нет причин (возможности) ее прохождения. Поэтому просто верните новый узел в этот момент. См. Обновленный ответ для некоторого кода. – ooga
святой корова это сработало. Хах. Попытка лучше понять это сейчас. Если queue = NULL, он возвращает new_node. Я понимаю. Если очередь не равна null, она переходит к концу списка и назначает queue-> next to queue. то он назначает new_node queue-> next ... и возвращает очередь. Будет ли это работать более чем на два элемента? Связанные списки заставляют мою голову болеть. Большое вам спасибо за помощь! – AzathothM