étant donné un nœud comment puis-je trouver nœud précédent dans une seule liste liée
Donné le noeud courant, comment puis-je trouver son nœud précédent dans une seule Liste Liée. Merci. La logique va le faire , le code est apprécié. Nous savons tous donné un nœud racine, on peut faire une séquentiel traverse , je veux savoir si il ya une façon plus intelligente qui évite l'accès séquentiel frais généraux. (supposons qu'il n'y est pas accès à nœud racine) Merci.
Code serait appréciée ici aussi, pour répondre à la question.
OriginalL'auteur David Prun | 2011-08-25
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas.
Individuellement des listes liées, par définition, que le lien de chaque noeud à son successeur, pas de prédécesseur. Il n'y a pas d'informations sur les prédécesseur; même pas d'informations sur si il existe (votre nœud pourrait être la tête de liste).
Vous pouvez utiliser une liste à double liaison.
Vous pourriez essayer de réorganiser tout ce que vous avez le prédécesseur transmis en tant que paramètre dans la première place.
Vous pourriez scanner l'ensemble du tas à la recherche pour un dossier qui ressemble à un nœud prédécesseur avec un pointeur vers le noeud. (Non sérieux la suggestion.)
NULL
ou quelque chose de similaire??"Vous ne pouvez pas" signifie "il n'est pas mathématiquement possible". Il y a un manque de l'information qui ne peuvent pas être recréés. La question est (je pense) fait qu'il est évident qu'ils n'ont même pas accès à la tête de la liste; donc, il n'y a pas de point de départ pour effectuer une itération de la façon dont vous le suggérer.
oui il n'y a pas de nœud racine.
À suivre, si vous accéder à la tête de la liste, alors vous êtes en mesure de suivre ma suggestion pour "réorganiser tout ce que vous avez le prédécesseur passé".
À droite, puis, je suis désolé helloMaga, mais la réponse à votre question est que ça ne pouvait pas être fait.
OriginalL'auteur hemflit
Parcourir la liste depuis le début jusqu'à ce que vous rencontrer un nœud dont le
next
lien de points vous votre nœud actuel.Mais si vous devez le faire, peut-être que vous ne pouvons pas être à l'aide d'une seule liste liée en premier lieu.
OriginalL'auteur Henning Makholm
En supposant que vous parlez de l'avant d'une seule liste liée (chaque nœud n'a qu'un pointeur sur "suivant" etc), vous devrez effectuer une itération à partir du début de la liste jusqu'à ce que vous trouvez que le nœud a 'suivant' égal à votre nœud actuel. Évidemment, c'est une lente
O(n)
opération.Espère que cette aide.
OriginalL'auteur Darren Engwirda
Votre seule option pour une liste liée individuellement est une recherche linéaire, quelque chose comme ci-dessous (Python-comme le pseudo-code):
OriginalL'auteur filip-fku
Utiliser un nodeAt() la méthode et passer la tête,de la taille et de l'indice du nœud actuel.
où n retourne le nœud de son prédécesseur.
OriginalL'auteur Mifta_Sintaha
C'est une sorte de hack que j'ai découvert tout en résolvant le problème(Supprimer tous les même nœud dans une liste)
Ici prev vous attribuer le courant, puis déplacer l'actuel à côté ce qui prev contient le nœud précédent.
Espérons que cela aide...
OriginalL'auteur srinivas
Voici un petit truc avec recherche linéaire: il suffit de passer dans le nœud ou de sa position, dont le nœud précédent vous êtes à la recherche de:
OriginalL'auteur saran3h
Garder deux-pointeur(curr, prev) au début, les deux vont point à la tête de la liste.
de faire une boucle sur la liste jusqu'à ce que vous atteindre à la fin de la liste ou au nœud requis.
pour chaque itération déplacer curr nœud à la prochaine, mais avant de passer à la prochaine stocker son pointeur en prev pointeur.
à la fin de la boucle prev nœud contiendra nœud précédent.
Exemple:
list = 1->5->10->4->3
Nous voulons prev nœud de 4 key = 4 et de la tête au point 1 ici
d'abord:
itération 1:
itération 2:
itération 3:
itération 4:
Speight merci pour la suggestion.
OriginalL'auteur Pankaj Singh
On peut parcourir à travers les LinkedList en utilisant lent et rapide des pointeurs.
Disons
Lent pointeur sera toujours une précédente rapide du pointeur, et on peut donc en mesure de le trouver.
OriginalL'auteur Maulik Sakhida
en supposant que vous utilisez en avant individuellement liée liste votre code devrait ressembler à
if(node.content == whatINeed) { doSomething(previous.content); }
.OriginalL'auteur arunmur