Предположим, мы дважды связанный список узловСвязанный список в C - методы
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int value;
struct Node* next;
struct Node* prev;
} Node;
typedef struct LinkedList {
Node *first;
Node *last;
} LinkedList;
void initList(LinkedList* l) {
l->first = NULL;
l->last = NULL;
}
и я должен метод кода, который вставляет новый узел с заданным значением в конце списка и возвращает указатель на новый узел. Моя попытка следующим образом:
Node *insert(LinkedList *list, int value) {
Node node;
node.value = value;
node.prev = list->last;
node.next = NULL;
if (list->last != NULL){
(list->last)->next = &node;
}else{
list->first = &node;
list->last = &node;
}
return &node;
}
Кажется, что включение в пустой список работ, но не для не пустой.
(Существуют тесты внедрения, которые говорят мне, что вставка была успешной или нет. Я могу опубликовать их коды, но не думаю, что это важно).
Итак, пожалуйста, где ошибки?
Существует предупреждение в журнале (51-й линии является то, что с «вернуть & узел»)
C:\...\main.c|51|warning: function returns address of local variable [-Wreturn-local-addr]|
Это серьезная проблема? И как его удалить?
Спасибо за ответы, но я думаю, что есть еще проблема с непустых списков, так как в соответствии с тестом, это не удается:
void test_insert_nonempty(){
printf("Test 2: ");
LinkedList l;
initList(&l);
Node n;
n.value = 1;
n.next = NULL;
l.first = &n;
l.last = &n;
insert(&l, 2);
if (l.last == NULL) {
printf("FAIL\n");
return;
}
if ((l.last->value == 2) && (l.last->prev != NULL)) {
printf("OK\n");
free(l.last);
}else{
printf("FAIL\n");
}
}
Спасибо, а человек. – byk7
Могу ли я продолжить в этой теме другие вопросы, связанные со связанным списком, или мне создать новый? – byk7
@ byk7 Вы должны задать новый вопрос. –