Это правильный способ замены их содержимого?
Если вы хотите поменять местами часть данных (и оставить указатели next / prev нетронутыми), вам нужно:
void swap_values(List *p1, List *p2)
{
char* tmp;
for (int i = 0; i < 37; i++)
{
tmp = p1->arr[i];
p1->arr[i] = p2->arr[i];
p2->arr[i] = tmp;
}
}
Альтернативный подход:
void swap_values(List *p1, List *p2)
{
char *tmp[37];
memcpy(tmp, p1->arr, 37 * sizeof(char*));
memcpy(p1->arr, p2->arr, 37 * sizeof(char*));
memcpy(p2->arr, tmp, 37 * sizeof(char*));
}
Если вы хотите поменять местами узлы (вместо данных внутри), вам понадобится другой прототип функции. Это связано с тем, что заменяемые узлы могут быть первым и / или последним узлами. В этом случае указатели head
и / или tail
изменятся.
Возможно что-то вроде:
void swap_values(List *p1, List *p2, List **head, List **tail){ ... }