Попытка заполнить односвязный список - PullRequest
0 голосов
/ 16 апреля 2020

Итак, у меня есть односвязный список в java

 public class ListNode {
      int val;
      ListNode next;

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

Теперь я пытаюсь заполнить список String number = "213214", который по сути является просто числом. Теперь каждый узел будет одним ди git от этого числа.

Это то, что у меня есть в настоящее время.

   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;

    }

Поэтому я пытаюсь сделать так, чтобы

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

Есть идеи?

Ответы [ 4 ]

0 голосов
/ 16 апреля 2020

Поскольку существует узел root. Следующие коды работают.

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 голосов
/ 16 апреля 2020

Попробуйте вот так

 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 голосов
/ 16 апреля 2020

Итак, как я проверил, ваш код работает нормально. просто вы потеряли узел root (head) при изменении переменной root для вставки нового ListNode. Используйте временную переменную для этого. Ниже приведен измененный код.

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;
    }
}

Также вам не нужно некоторое время l oop внутри для l oop. Он всегда запускается только один раз.

0 голосов
/ 16 апреля 2020

Я думаю, это должно сработать для вас. Поскольку root назначен новому элементу root, вы не можете печатать. Сохраните ссылку на элемент root и используйте ее для печати логи c

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;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...