Игнорировать ответы о двусвязных списках. Чтобы ответить на ваш вопрос, вам нужно подумать о том, как вы вызываете свою функцию.
Прямо сейчас у вас есть функция, которая берет указатель на указатель. В настоящее время он указывает на узел (узел A), который, в свою очередь, указывает на другой узел (узел B). Представьте себе этот сценарий:
partType a, b, c, d;
a->next = &b;
b->next = &c;
c->next = &d;
d->next = NULL;
Теперь вы хотите поменять местами порядок B и C, чтобы A-> C-> B-> D, используя вашу функцию. Ну, ты бы сделал:
swap_node(&a->next);
A указывал на B; теперь он указывает на C. Как видите, «предыдущий» узел уже указывает на C, как вы и ожидали. Другими словами, вы уже достигли своей цели. Ура!
Примечания: Что именно происходит в вашей функции подкачки? Давайте разберемся с этим. Во-первых, заданный вами параметр - это указатель на указатель . Об этом стоит подумать из-за формулировок - не позволяйте формулировкам обмануть вас. Точно так же, как «скорость изменения скорости изменения» - сука, но «ускорение» намного проще. Вы хотите разобрать его, помня, что параметр - это, в первую очередь, указатель на некоторые данные, и ваша функция собирается изменить данные, на которые она указывает.
Таким образом, ваша функция получает указатель на этот «p», который указывает на точку в связанном списке, которая (вы предполагаете, см. PS) указывает на два узла (назовите их X и Y). Диаграмма:
[p] --> X[next] --> Y[next] --> Z[next]
Ваш алгоритм делает:
- Сделайте [p] указанием на Y: * item = (* item) -> next
- Сделать X [следующий] точкой Z: temp-> next = (* item) -> next
- Сделать так, чтобы Y [следующий] указывал на X: (* item) -> next = temp
Итак, если вы рассмотрите мой пример A, B, C, D, связанный список будет:
A[next] --> B[next] --> C[next] --> D[next] --> NULL
Вы можете более четко видеть, какой указатель я передаю. Это место в памяти (читай: указатель), в котором хранится A [next], и ваша функция должна выполнить обмен.
Кстати, другой способ закодировать это можно сделать:
a->next = swap_node(&a->next);
но не делай этого. Это избыточно.
PS Задумывались ли вы о том, что происходит, когда вы просите поменять местами последний узел в серии? Прямо сейчас, вещи взрываются: P