Мне нужно написать программу, которая будет по существу сортировать узлы в связанном списке. У меня есть 5 функций, которые нужно написать для этого задания, и я застрял на одной из них. У меня возникли проблемы с заменой двух узлов местами. Заголовок функции следующий:
void swap (struct lnode** head, struct lnode* n1, struct lnode* n2)
Я добился того, чтобы это работало правильно, пока два узла не находятся рядом друг с другом. Нам предоставлен файл list.h, и мы должны использовать две функции evictNode(struct lnode** head, struct lnode* node)
и void insertNode (struct lnode** head, struct lnode* prevNode, struct lnode* nodeToBeInserted)
. Эти функции также обрабатывают переназначение указателей next
и previous
. Я просто не совсем уверен, как поменять местами узлы, если они находятся рядом друг с другом. Я пытался нарисовать это, но не смог осмыслить это.
Кстати, с остальными узлами я работаю с помощью следующего кода:
evictNode(head, n1);
evictNode(head, n2);
insertNode(head, n1prev, n2);
insertNode(head, n2prev, n1);
РЕДАКТИРОВАТЬ: попытки
struct lnode* temp = n2;
insertNode(head,n1prev,temp)
evictNode(head, n2)
где struct lnode* n1prev = nodeGetPrev(n1)
есть две функции, возвращающие предыдущий / следующий указатели