Реверсирование связанного списка с использованием указателей на языке программирования C

#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. Поскольку ваш вопрос касается реверсирования, вы должны опустить часть, которая удаляет узлы. Предоставьте только минимальный код, чтобы подчеркнуть вашу проблему.