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?
4 Réponses :
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; }
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.
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; } }
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.
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; }
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 ();