Если нет внешних указателей на элементы, которые вы хотите поменять, то вы можете просто поменять местами данные внутри узлов списка, а не сами узлы, как указано в других ответах.
Еслиу вас есть внешние указатели на узлы списка, тогда вам, вероятно, не стоит связываться с содержимым узла, если только остальная часть вашей программы не найдена с изменением содержимого узла из-под его ног.
Вам придется поменять узлыЭто означает, что вам нужно иметь указатель на узел, который предшествует тем, которые вам нужно поменять местами.Если у вас есть только заголовок списка, то функция подкачки может выглядеть примерно так:
void swap(Node **list, Node *first) {
Node *i = *list;
Node *p = NULL;
while (i != NULL) {
if (i == first) {
Node *n = i->next;
/* No next node to swap with */
if (n == NULL)
break;
if (p != NULL) {
p->next = n;
} else {
*list = n;
}
i->next = n->next;
n->next = i;
break;
}
p = i;
i = i->next;
}
}