У меня проблема: в функции программа должна сравнивать два узла и удалять одну из них, если значения узлов одинаковы (пример: A -> B -> B -> C >>> A -> B -> C). В нескольких словах: он должен оставлять только уникальные узлы.C Функция оставить только уникальные узлы в одиночном списке
Шаги, которые я сделал: созданный список из данных, данных в файле данных, и он отлично распечатывается. Теперь я пытаюсь сравнить два узла.
Шаги, которые я собираюсь сделать: Поместите два значения узлов в две разные переменные, а затем сравните эти два и, если последний узел равен предыдущему, удалите последнюю и каким-то образом привяжите предыдущий узел к следующему узлу. Затем цикл повторяется снова и снова.
Вопрос: Как сравнить узел с другим?
Вот код, который я прямо сейчас:
#include <stdio.h>
#include <stdlib.h>
#define LENGTH 255
struct node {
int info;
struct node *next;
} *head = NULL;
int create(FILE **data){
char read[LENGTH];
printf("Write data file name: ");
scanf("%s", read);
*data = fopen (read, "r");
if (data == NULL) {
printf("Error reading given file.");
}
return 0;
}
int put_Symbols_into_list(FILE *data) {
struct node *new_node, *current;
char c;
printf("Data given: ");
while (!feof(data)){
new_node = (struct node*)malloc(sizeof (struct node));
c = fscanf(data, "%s", &new_node -> info);
printf("%s ", &new_node -> info);
if (head == NULL){
head = new_node;
current = new_node;
} else {
current -> next = new_node;
current = new_node;
}
}
}
int delete_Same_Symbols() {
}
int main() {
FILE *data;
struct node *n;
create(&data);
put_Symbols_into_list(data);
delete_Same_Symbols();
//display_List(n);
return 0;
}
@Rimantas Radžiūnas Там нет смысла обсудите, как удалить дубликаты, потому что сначала вам нужно правильно написать функцию, которая добавляет узлы в список. В настоящее время ваша функция недействительна. –
Итак, в чем проблема? Где я ошибался? –
Вам необходимо установить элемент данных, следующий из последнего добавленного узла, в NULL. –