2017-08-31 4 views
1

Donc ListNodes m'a vraiment dérouté et j'ai essayé de comprendre des extraits de code pour voir comment ils fonctionnent, mais la fonction inverse suivante que je ne peux pas comprendre en particulier la boucle while peut quelqu'un expliquez-moi s'il vous plaît.Inverser une liste liée (aide)

// Definition for singly-linked list: 
// class ListNode<T> { 
// ListNode(T x) { 
//  value = x; 
// } 
// T value; 
// ListNode<T> next; 
// } 
// 

ListNode<Integer> reverse(ListNode<Integer> l) { 
    if(l==null||l.next==null) 
     return l; 

    ListNode<Integer> p1 = l; 
    ListNode<Integer> p2 = p1.next; 

    l.next = null; 

    while(p1!=null&& p2!=null){ 
     ListNode<Integer> t = p2.next; 
     p2.next = p1; 
     p1 = p2; 
     p2 = t; 
    } 

    return p1; 

} 
+1

quelle langue est-ce? – OmegaNalphA

+0

@OmegaNalphA c'est java – csmajor97

Répondre

0

Essentiellement, ils font une variable temporaire t qui maintient la valeur supplémentaire p2 pointe vers, changer les pointeurs entre P1 et P2, alors que le nouveau point de p2 à cette variable temp. Comme ils ont déjà déclaré des points p2.next à p1, ils ne sont jamais supprimés même si p2 le remplace dans la ligne suivante. Il est étrangement écrit cependant, habituellement je l'ai vu où les pointeurs sont mélangés plutôt que la façon dont il est montré ici.

+0

Ce que je ne comprends pas, c'est comment la variable temporaire t est capable de se maintenir à la valeur initiale de p2.next. Par exemple, lorsque ListNode p1 = l et que nous produisons l.next = null, cela provoque aussi p1.next = null. Donc, si nous changeons p2.next = p1, cela ne signifie-t-il pas que ListNode t = p1 aussi? – csmajor97

+0

Je suis sûr que dans ce cas, il copie la valeur car dans java ils ne traitent pas vraiment des pointeurs, donc c'est une copie de l'objet situé dans p2.next. Une chose que vous pouvez faire pour vérifier est d'imprimer la valeur de t et p2.next chaque fois que l'exécution se produit (par exemple, insérer une chaîne dans chaque nœud qui incrémente) et voir ce qui se passe/comment ça change – OmegaNalphA