0
votes

Essayer de remplir une seule liste liée

J'ai donc une seule liste liée en java

root(2)->node(1)->node(3)->node(2)->node(1)->node(4)->ListEND

Maintenant, ce que j'essaie de faire, c'est de remplir la liste avec le String number = "213214" qui est essentiellement juste un nombre. Maintenant, chaque nœud sera un seul chiffre de ce numéro.

C'est ce que j'ai actuellement.

   int firstnode = Integer.parseInt(String.valueOf(m.charAt(0)));
    ListNode root = new ListNode(firstnode);

    for(int i = 1; i<m.length(); ++i) {

    while (root.next ==  null) {

       root.next = new ListNode(Integer.parseInt(String.valueOf(m.charAt(i))));

    }
    root = root.next;

    }

Donc j'essaye de faire en sorte que

 public class ListNode {
      int val;
      ListNode next;

      ListNode(int x){ 
         val = x; 
      }
  }

Des idées?


1 commentaires

La variable m est la somme de deux listes liées, donc je parcours essentiellement la liste en ajoutant chaque nombre à une chaîne et en les ajoutant avec les nombres de la deuxième chaîne. String m = String.valueOf (sumOfTwoLists (s, f)); StringBuilder max = nouveau StringBuilder (m); m = max.reverse (). toString ();


4 Réponses :


0
votes

Je pense que cela devrait fonctionner pour vous. Puisque la racine est affectée au nouvel élément racine, vous ne pouvez pas imprimer. Conservez la référence de l'élément racine et utilisez-la pour la logique d'impression

ListNode root = new ListNode(firstnode);
        ListNode printRoot = root;

    for (int i = 1; i < m.length(); i++) {

        if (root.next == null) {

            root.next = new ListNode(Integer.parseInt(String.valueOf(m.charAt(i))));
            root = root.next;
        }
    }

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


1 commentaires

Hmmm ne fonctionne pas. J'obtiens une erreur lorsque j'essaye de faire System.out.println (root.next.val); Exception de pointeur nul, la valeur de mes racines passe également de 2 à 1.



0
votes

Essayez de cette façon

 public class SingleLinkedList {

        LinkedList root = null;

        public static void main(String[] args) {
            SingleLinkedList sll = new SingleLinkedList();
            sll.root = new LinkedList(1);
            sll.root.next = new LinkedList(2);
            sll.root.next.next = new LinkedList(3);
            sll.root.next.next.next = new LinkedList(4);
            sll.root.next.next.next.next = new LinkedList(5);

            while (sll.root != null){
                System.out.println("sll.root.value = " + sll.root.value);
                sll.root = sll.root.next;
            }
        }
    }

    class LinkedList{
        int value;
        LinkedList next;

        LinkedList(int data){
            value = data;
            next = null;
        }
    }


0 commentaires

0
votes

Donc, comme j'ai vérifié, votre code fonctionne correctement. juste que vous avez perdu le nœud racine (head) lorsque vous modifiez la variable racine pour insérer un nouveau ListNode . Utilisez une variable de température pour cela. Voici le code modifié:

public static void main(String[] args) {
    String m = "213214";
    int firstnode = Integer.parseInt(String.valueOf(m.charAt(0)));
    ListNode root = new ListNode(firstnode);


    ListNode temp = root;
    for (int i = 1; i < m.length(); ++i) {

        while (temp.next == null) {
            temp.next = new ListNode(Integer.parseInt(String.valueOf(m.charAt(i))));
        }
        temp = temp.next;
    }

    temp = root;

    while (temp != null) {
        System.out.print("->" + temp.val);
        temp=temp.next;
    }
}

De plus, vous n'avez pas besoin d'une boucle while dans la boucle for. Il ne s'exécute toujours qu'une seule fois.


0 commentaires

0
votes

Puisqu'il y a un nœud racine. Les codes suivants fonctionnent.

import java.util.*;
import java.util.stream.*;

public class ListNode {

    public static void main(final String... args) {
        final ListNode root = new ListNode(0);
        "213214".chars()
            .map(Character::getNumericValue)
            .mapToObj(ListNode::new)
            .reduce(root, (n1, n2) -> {
                    n1.next = n2;
                    return n2;
                });
        ;
        System.out.println(root);
    }

    ListNode(final int value) {
        super();
        this.value = value;
    }

    @Override
    public String toString() {
        return super.toString() + "{"
            + "value=" + value
            + ",next=" + next
            + "}";
    }

    private int value;

    private ListNode next;
}


0 commentaires