Зависит от того, что вы подразумеваете под этим
Один групповой сертификат может использоваться для нескольких хостов с разными записями А.
Например, у вас есть сертификат с подстановочными знаками для домена. *.stackoverflow.com.
Вы можете иметь одобренный CA протокол TLS, если на новых серверах, которые вы используете, используется поддомен домена stackoverflow.com
, т.е. mail-server.stackoverflow.com
Допустим, у нас есть:
Node1 -> Node2 -> Node3 -> Node4 -> Node5
Чтобы поменять местами два узла, вам нужно поменять местами next
значений единиц перед каждым из них, а также next
значений узлов, которые вы хотите поменять местами.
Таким образом, чтобы поменять местами, скажем, Node2 и Node3, у вас фактически есть чтобы поменять местами Node1-> next
на Node2-> next
, а Node2-> next
с Node3-> next
. Это будет работать, даже если они находятся рядом друг с другом (или даже если это один и тот же узел). Например:
Swap Node1-> next
и Node2-> next
Node1->next = Node3
Node2->next = Node2
Поменять местами Node2-> next
на Node3-> next
Node2->next = Node4
Node3->next = Node2
Это выглядит так:
Node1 -> Node3 -> Node2 -> Node4 -> Node5
Swapped!
Как показано в разделе комментариев, при замене узла Node1 чем-либо вам придется установить новый заголовок для связанного списка.
В ответ на редактирование вопроса:
Ваш код для обмена почти верно. Однако вам нужно поменять местами firstPrev на secPrev. В моем примере так получилось, что мы дважды меняли местами одно из значений узла next
, потому что они были рядом друг с другом. Но логически мы хотим поменять местами следующие
из двух предыдущих, а затем поменять местами следующие
фактических узлов. Попробуйте следующее:
//swap firstPrev-> next with secPrev->next
tmp = firstPrev->next;
secPrev->next = firstPrev->next;
secPrev->next = tmp;
//swap swap first->next with second->next
tmp = first->next;
second->next = first->next;
second->next = tmp;
Если вы получаете segfault, проверьте переменную tmp - это может быть где-то ошибка выделения или удаления. Откуда у вас segfault?
While I am not 100% sure the answer should involve references to node pointer (or pointers to pointers) and this should then handle a case when one of the nodes is the head of list as well.
void swapNodes(node *&first, node *&second)
{
node *t = second->next;
second->next = first->next;
first->next = t;
t = second;
second = first;
first = t;
}
Then you can call it for example:
swapNodes(head, secPrev->next);
or
swapNodes(firstPrev->next, head);
or
swapNodes(firstPrev->next, secPrev->next)
and it should work automagically.
EDIT:
swapNodes could be even more readable:
void swapNodes(node *&first, node *&second)
{
std::swap(first->next, second->next);
std::swap(first, second);
}
В большинстве реальных сценариев замена значений будет лучшим решением:
void swapNode(call * &head, call * &first, call * &second) {
// swap values, assuming the payload is an int:
int tempValue = first->value;
first->value = second->value;
second->value = tempValue;
}
Если это не разрешено, то вместо этого вы захотите сделать замену в аналогичном стиле на -> next компонента -> value. Затем выполните еще одну замену компонентов firstPrev-> next и secondPrev-> next. Не упустите особый случай, когда первая или вторая == голова.