私のノードは整数値を持っています。そして、私は私のプログラムがそのような値を使用して2つのノードを交換することを望みます:
void reemplazarNodosConValores(int a,int b) {
node *antecedenteDelPrimero = antecedentePorValor(a);
node *antecedenteDelSegundo = antecedentePorValor(b);
node *primero = nodoPorValor(a);
node *segundo = nodoPorValor(b);
node *nextDelPrimero = siguienteNodo(primero);
node *nextDelSegundo = siguienteNodo(segundo);
antecedenteDelSegundo->next = primero;
primero->next = nextDelSegundo;
antecedenteDelPrimero->next = segundo;
segundo->next = nextDelPrimero;
}
ご覧のとおり、6つの変数を作成します。2つのノード。それぞれの前のノード。そして、それぞれの後のノード。
次に、スワップを行います。
ただし、ノードを印刷しようとすると、スワッピングによって無限ループが発生するようです。
私はこの答えに基づいてスワップを作成しました:https ://stackoverflow.com/a/1536011/555690
編集:要求に応じて、他の機能:
node *antecedentePorValor(int x) {
node *resultado = NULL;
for (int i = 0; i < counter; ++i) {
resultado = siguienteNodo(resultado);
if (siguienteNodo(resultado)) {
if (siguienteNodo(resultado)->data == x) {
break;
}
}
}
return resultado;
}
node *nodoPorValor(int x) {
node *resultado = head;
for (int i = 1; i < counter; ++i) {
if (resultado->data == x) {
break;
}
resultado = resultado->next;
}
return resultado;
}
node *siguienteNodo(node *nodo) {
node *resultado;
if (nodo) {
resultado = nodo->next;
}else{
resultado = head;
}
return resultado;
}