#c #reverse #singly-linked-list
Вопрос:
Попытка отменить связанный список перед печатью
#include lt;stdio.hgt; #include lt;stdlib.hgt; struct NODE { int value; struct NODE* prev; struct NODE* next; }; struct NODE* addElement(struct NODE *tail, int val){ struct NODE *n = malloc(sizeof(struct NODE)); n-gt;value =val; n-gt;prev=NULL; if(tail==NULL){ return n; } struct NODE* c=tail; while(c!=NULL amp;amp; c-gt;prev!=NULL){ c=c-gt;prev; } c-gt;prev=n; return tail; } struct NODE* deleteEqualNodes(struct NODE *tail, int x){ struct NODE *temp = tail, *prev; if (temp != NULL amp;amp; temp-gt;value == x) { tail = temp-gt;prev; free(temp); temp = tail; } while (temp != NULL) { while (temp != NULL amp;amp; temp-gt;value != x) { prev = temp; temp = temp-gt;prev; } if (temp == NULL) return tail; prev-gt;prev = temp-gt;prev; free(temp); temp = prev-gt;prev; } return tail; } void printList(struct NODE *tail){ int count=0; //if(tail == NULL) return; //tail-gt;prev = tail; while(tail!=NULL){ if(count==0){ printf("%d ",tail-gt;value); count=1; } else{ printf(", %d ",tail-gt;value); } tail = tail-gt;prev; } printf("n"); } int main(){ int n; scanf("%d",amp;n); struct NODE* tail=NULL; struct NODE* newList=NULL; for(int i=0;ilt;n;i ){ int a; scanf("%d",amp;a); newList = addElement(newList, a); } int k; scanf("%d",amp;k); k = k 1; tail = deleteEqualNodes(newList, k); printList(tail); }
Размер входного указателя «n» (пример 9)
Введите n целых чисел (например. 1 2 3 4 5 6 5 4 3)
Введите, какой узел (индекс) следует удалить (пример 5)
/////////////////////////////////////////////////////////////////////////////////
Выход по току (ex. «1, 2, 3, 4, 5, 5, 4, 3»)
Желаемый результат (например. «3, 4, 5, 5, 4, 3, 2, 1»)
важно* Удаление должно быть выполнено до отмены связанного списка
Комментарии:
1. Код слишком большой. Сделайте это: Удалите фрагменты вашего кода во время тестирования. Удалите все, что не имеет отношения к ошибке — найдите наименьший пример кода, в котором ваша ошибка все еще присутствует, и вы не можете сделать свой код меньше и все еще иметь ошибку. При этом ваша программа может больше не иметь смысла. Не беспокойтесь об этом — ваша цель — воспроизвести ошибку. В процессе этого вы, возможно, поймете, в чем ваша проблема. Если нет, опубликуйте здесь самый маленький пример. Он называется «SSCCE» — самый маленький, самодостаточный, правильный пример. «Правильно» здесь означает — создание ошибки.
2. Почему вы не отладили свой код? Вы могли бы, по крайней мере, вставить некоторые
printf()
из них в соответствующие места и распечатать «интересные» значения.3. Поскольку ваш вопрос касается реверсирования, вы должны опустить часть, которая удаляет узлы. Предоставьте только минимальный код, чтобы подчеркнуть вашу проблему.