2017-10-19 4 views
0

Je ne peux pas renvoyer la valeur de la fonction AddTwoNumber à la fonction principale. J'ai déjà vérifié le résultat dans la fonction et c'est correct. Cependant, quand je passe la valeur de AddTwoNumber dans ListNode start, il n'imprime rien. Je pense que le problème se produit ici:Impossible d'imprimer Ajouter deux nombres en Java

ListNode dummy = new ListNode(0); 
ListNode node = dummy; 

mais je ne sais pas comment le résoudre.

ListNode.cs:

class ListNode { 
    public int data;  // data stored in this node 
    public ListNode next; // link to next node in the list 

    // post: constructs a node with data 0 and null link 
    public ListNode() { 
     this(0, null); 
    } 

    // post: constructs a node with given data and null link 
    public ListNode(int data) { 
     this(data, null); 
    } 

    // post: constructs a node with given data and given link 
    public ListNode(int data, ListNode next) { 
     this.data = data; 
     this.next = next; 
    } 
} 

main.cs:

public static void main(String[] args) { 

    ListNode first = new ListNode(8, 
        new ListNode(9, 
        new ListNode(7 ))); 

    ListNode second = new ListNode(3, 
         new ListNode(5, 
         new ListNode(6 ))); 

    ListNode start = AddTwoNumber(first,second); 

    while (start!=null) { 
     System.out.println(start.next); 
     start=start.next; 
    } 

} 

public static ListNode AddTwoNumber(ListNode first, ListNode second) { 
    ListNode dummy = new ListNode(0); 
    ListNode node = dummy; 
    int Digitsten = 0; 
    int sum = 0; 
    //Once fit first&second =null & Digitsten=0,the code can stop 
    while (first != null || second != null || Digitsten != 0) { 

     if (first != null && second != null) { 
      sum += first.data + second.data + Digitsten; 
     } else if (first!= null) { 
      sum += first.data + Digitsten; 
     } else if (second!= null) { 
      sum += second.data + Digitsten; 
     } else { 
      sum=Digitsten; `enter code here` 
     } 

     int DigitsOne = sum % 10; 

     Digitsten = sum/10; 

     node = new ListNode(DigitsOne); 
     node = node.next; 

     if (first == null) { 
      first = null; 
     } else { 
      first = first.next; 
     } 

     if (second == null) { 
      second = null; 
     } else { 
      second = second.next; 
     } 
     sum = 0; 

    } 
    return dummy.next; //return the value to dummy ListNode 
} 
+0

Où est votre méthode 'Addtwonumbers'? S'il vous plaît poster l'intégralité du code. –

+0

En fait je l'ai posté dans le code, désolé je n'ai pas mis le nom correct, son AddTwoNumber – yamahachou

Répondre

0

Le vrai problème est à l'intérieur de votre méthode AddTwoNumber. Vous ne pouvez pas faire pointer un nœud vers un nouveau nœud. Vous devez ensuite pointer vers un nouveau nœud avant de passer à l'étape suivante.

public static ListNode AddTwoNumber(ListNode first, ListNode second){ 

ListNode dummy = new ListNode(0); 
ListNode node = dummy; 
int Digitsten = 0; 
int sum = 0; 

while (first != null || second != null || Digitsten != 0) 
{ 
    if (first != null && second != null) 
    { 
     sum += first.data + second.data + Digitsten; 
    } 
    else if (first!= null) 
    { 
     sum += first.data + Digitsten; 
    } 
    else if (second!= null) 
    { 
     sum += second.data + Digitsten; 
    } 
    else 
    { 
     sum=Digitsten; `enter code here` 
    } 

    int DigitsOne = sum % 10; 
    Digitsten = sum/10; 

    // LOOK HERE!!! 
    node.next = new ListNode(DigitsOne); 
    node = node.next; 


    if (first == null) 
    { 
     first = null; 
    } 
    else 
     first = first.next; 

    if (second == null) 
    { 
     second = null; 
    } 
    else 
    { 
     second = second.next; 
    } 
    sum=0; 
} 
return dummy.next;//return the value to dummy ListNode 
+0

Merci beaucoup !! Cela a fonctionné, pouvez-vous me dire où est le problème? En fait, je suis un peu confus au sujet de la notion de point au nouveau noeud et pointant vers un nouveau noeud – yamahachou