Обмен нод местами при сортировки в линейном списке C
Есть функция линейной сортировки списка на Си
void linear_sort(struct List* _list){
struct Node *curNode = begin(_list);
struct Node* memory;
while(next(curNode) != end(_list)){
if(strcmp(curNode->key.string, next(curNode)->key.string) > 0){
memory = curNode;
printf("%s%d%s\n", memory->key.string, memory->key.value, memory->data);
printf("%s%d%s\n", curNode->key.string, curNode->key.value, curNode->data);
printf("%s%d%s\n", curNode->next->key.string, curNode->next->key.value, curNode->next->data);
curNode->key = next(curNode)->key;
curNode->data = next(curNode)->data;
printf("%s%d%s\n", curNode->key.string, curNode->key.value, curNode->data);
curNode->next->data = memory->data;
curNode->next->key = memory->key;
printf("%s%d%s\n", curNode->next->key.string, curNode->next->key.value, curNode->next->data);
}
curNode = next(curNode);
}
}
Я хочу обменять ключи и данные двух нод местами, у меня получается перенести данные и ключ второй ноды в первую, предварительно сохранив в переменной memory данные первой ноды, но во вторую из первой не получается, так как почему-то содержимое memory->data и memory->key само изменяется. Пытаюсь дебажить printf и вот что выдает:

Как можно сделать, чтобы в следующие ноду клались ровно те значения, которые имеет memory в начале функции?
Ответы (1 шт):
Автор решения: Pak Uula
→ Ссылка
У вас memory - это не копия текущего узла, а ещё один указатель на память.
Вам нужно что-то вроде:
struct Node tmp = { .key = curNode.key, .data = curNode.data };
curNode->key = next(curNode)->key;
curNode->data = next(curNode)->data;
next(curNode)->key = tmp->key;
next(curNode)->data = tmp->data;