Étant donné une liste de nombres. Swap tous les 2 liens adjacents
Donné une liste de nombres. Swap tous les 2 liens adjacents. Par exemple, si une liste liée donné est:
a->b->c->d->e->f
De sortie prévue:
b->a->d->c->f->e
Tous les 2 autres liens doivent être inversés.
J'ai écrit une solution ici. Pouvez-vous me suggérer une autre solution. Pouvez-vous commenter ma solution et m'aider à mieux écrire?
void SwapAdjacentNodes (Node head)
{
if (head == null) return;
if (head.next == null) return;
Node curr = head;
Node next = curr.Next;
Node temp = next.Next;
while (true)
{
temp = next.Next;
next.Next = curr;
curr.Next = temp;
if (curr.Next != null)
curr = curr.Next;
else
break;
if (curr.Next.Next!=null)
next = curr.Next.Next;
else
break;
}
}
careercup.com/question?id=2177669
Ouais je l'ai ramassé question à partir de là, mais ont mis en œuvre, à ma façon...je me demandais si je peux obtenir une meilleure solution ici
personne n'a rien dit à propos de pas à l'aide de stockage supplémentaire
Ouais je l'ai ramassé question à partir de là, mais ont mis en œuvre, à ma façon...je me demandais si je peux obtenir une meilleure solution ici
personne n'a rien dit à propos de pas à l'aide de stockage supplémentaire
OriginalL'auteur Learner | 2010-05-15
Vous devez vous connecter pour publier un commentaire.
Prendre un coup d'oeil à cette C++ solution:
Ici le courant est le nœud de tête.
OriginalL'auteur Vyaasprashanth
Voici un croquis d'une version beaucoup plus simple, en supposant que le Nœud a "Suivant" et "Données" les membres:
En d'autres termes, s'arrêter à chaque autre noeud dans la liste et de swap de ses données avec le suivant (celui). Simple.
Edit: au-Dessus de la solution de swaps de données dans les nœuds, mais pas les nœuds eux-mêmes. Si vous souhaitez échanger des nœuds réels, la solution exige la plus logique.
L'échange de données.? PAS de. PAS de. PAS de.! Vous êtes censé swap nœuds.
Ses mentionner clairement dans la question "Tous les 2 autres liens doivent être inversés." Mais cette réponse est d'échanger les données qui ne sont pas des nœuds.
OriginalL'auteur dkamins
@dkamins: U sont en train de changer les valeurs, mais dans ce type de questions, les enquêteurs demandent généralement pour un pointeur de brassage.
Une tentative de ma part pour le problème:
OriginalL'auteur Akash
Ici, il est en complète exécutable Java. C'est purement pointeur de jouer.
(suite...)
(voir plein de sortie)
OriginalL'auteur polygenelubricants
J'ai adapté @dkamins solution, dans un sens. Au lieu de prendre un pointeur vers un pointeur, je retourne la nouvelle
head
. J'ai aussi renforcé.Fondamentalement, la nouvelle tête de la liste est la tête si
NULL
ou de la longueur de 1 ou de la 2ème élément.Dans le swap, boucle,
tmp
finira par devenir le 2ème élément, mais au départ, c'est la première. Nous devons donc à point pour le 3ème élément, qui est le but detmp->next = n->next;
. Je n'utilise pas unfor
boucle parce que si nous le faisions, il est moins intuitif - la réévaluation de l'expression ne semble d'ailleurs se faire sauter par le noeud 1 par itération. À la fin de lawhile
boucle,n = tmp->next;
fait sens intuitif - nous le signaler à l'élément aprèstmp
, le 2ème élément.La partie la plus importante est la dernière ligne. Parce que nous faisons cela dans un sens, nous devons nous rappeler que la précédente itération du 2e élément est presque certainement va être pointant vers l'itération courante éventuelle 4e élément, parce que cette version sera swap 3 et 4. Ainsi, à la fin de l'itération, si nous nous rendons compte que nous allons échanger à nouveau la prochaine itération, nous tranquillement point de la 2ème élément de l'actuel 4ème élément, sachant que la prochaine itération, il sera le 3ème élément et tout va bien dans le monde.
Par exemple, si la liste est
2 -> 7 -> 3 -> 5
:C'est ok parce que n = 3, donc nous n'avons pas perdu de ce nœud. Prochaine itération:
Menant à la finale
7 -> 2 -> 5 -> 3
réponse.OriginalL'auteur Phil
Je suppose que pour la rendre plus efficace, il serait mieux de prendre un autre argument n dans la fonction.
Ce n est utilisé pour le comte , je.e après combien de compter les noeuds qui doit être changé. dans le cas ci-dessus, n= 2.
Et puis continuez à l'itération jusqu'à ce que vous frappez le n et utilisé l'inverse linklist alog ou récursive inverse linklist algo de le faire.
vide ReverseLinkList(struct noeud* tête, int n)
{
if( tete == null || null <= 0)
retour;
}
OriginalL'auteur alice7
Ça fonctionne!?
Parce que.
dire :
Après la boucle
et puis.
C'est ce que nous nous attendons à ce droit?
Mais u savoir. La chose réelle sera comme.
Car u n'a pas changé le 1->lien suivant pour 4! - Il encore des points à 3!
MA VERSION : Cliquez ici
OriginalL'auteur Yash
voici mon code c++: il sera de retour le pointeur vers le échangé liste liée
OriginalL'auteur bysreg
private static SList swapAlternateElements(SList n){
OriginalL'auteur user3209952
J'ai essayé de le résoudre, et voici la solution.
OriginalL'auteur fahadkaleem
Voici ma fonction C pour échanger des liens alternatifs de nœuds dans la liste chaînée.J'ai inclus des commentaires dans le code. Pour mieux comprendre prenons un exemple, et courir à travers les étapes en faisant des diagrammes à l'aide de la plume et du papier.
OriginalL'auteur learner
Mon point de vue sur la solution:-
OriginalL'auteur Raj Hassani
Ici, le "chef" est le pointeur vers le premier nœud de la Liste Liée et la fonction renvoie la nouvelle tête de pointeur.
}
OriginalL'auteur rohit27kr
OriginalL'auteur Sujeet
Il pourrait aider :
public static void main(String[] args) {
OriginalL'auteur Gaurav Sharma
C Code d'échanger Adjacentes
OriginalL'auteur amit kumar