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 ();