2017-10-17 3 views
-4

Je veux essayer une fonction fait renverser une liste liée. A recherché des codes, mais je ne comprends pas leurs algorithmes. Quelqu'un peut-il expliquer comment cela fonctionne (solution intérante)? Un peu essayé, mais pas travaillé.Inverser une manière une liste liée

code actuel:

void rvrprint(struct node *go) 
{ 
    struct node *tmp; 
    struct node *onc=NULL; 

    struct node *snk; 
    tmp=go; 
    while(tmp!=NULL) 
    { 
     snk = tmp->next; 
     tmp->next=onc; 
     tmp=snk; 
     printf("%d\n",tmp->x); 
    } 
    head = tmp; 
} 
+1

Vous avez essayé certaines choses mais cela n'a pas fonctionné. Eh bien, qu'avez-vous essayé et de quelle manière cela n'a-t-il pas fonctionné? – klutt

+1

Vous devez spécifier votre structure de données et vous devez également inclure les solutions que vous avez essayées afin que les autres puissent indiquer ce que vous devez changer. Stackoverflow n'est pas un service d'écriture de code où vous venez les mains vides et partez avec une solution complète – grek40

+0

ouais mais je veux expliquer son algorithme, je ne voulais pas écrire mon code. – frogwine

Répondre

1

Vous pouvez consulter une liste unique lien comme une pile. Si vous le faites alors vous devriez bientôt réaliser que la manière la plus simple de l'inverser est de prendre le premier noeud et de l'ajouter à une nouvelle liste (poussant le noeud sur une nouvelle pile). Ensuite, prenez le second noeud et ajoutez-le à la nouvelle liste (en appuyant à nouveau sur la nouvelle pile).

Déjà après cela, vous devriez voir que l'ordre des deux premiers nœuds est inversé. Cela continuera à mesure que vous parcourez toute la liste originale, et "pousser" ses nœuds sur la nouvelle liste.

0

Je pense que vous essayez de mettre en œuvre cette:

enter image description here

mais comme vous vous dites que votre auto: Votre code ne fonctionne pas!

Eh bien, vous avez manqué une étape importante dans la boucle.

Vous devriez pouvoir le trouver en étudiant le dessin ci-dessus en le comparant avec votre code. Sinon, laissez tomber un commentaire :-)

BTW: Cela ressemble aussi mal

head = tmp; 

comme temp est NULL.