2016-03-09 3 views
0
public class LinkedList{ 
    private class Node{ 
     int value; 
     Node next; 
    } 
    private Node root; 
    public LinkedList(){ 
     root = null; 
    } 
    public void insert(int value){ 
     root = insert(root, root, value); 
    } 
    public Node insert(Node node, Node parent, int value){ 
     if(root == null){ 
      node = new Node(); 
      node.value = value; 
     }else if(node == null){ 
      node = new Node(); 
      node.value = value; 
      parent.next = null; 
     }else{ 
      node.next = insert(node.next, node, value); 
     } 
     return node; 
    } 
    public void printAll(){ 
     printAll(root); 
    } 
    public void printAll(Node node){ 
     Node traverse = node; 
     while(traverse != null){ 
      System.out.println("This node's value is " + traverse.value); 
      traverse = traverse.next; 
     } 
    } 
    public static void main(String[] args){ 
     LinkedList myList = new LinkedList(); 
     myList.insert(5); 
     myList.insert(2); 
     myList.printAll(); 
    } 
} 

Вот программа, объясняющая мои проблемы. У меня есть функция вставки, которая имеет как текущий узел, так и родительский узел в качестве параметров. Для первой вставки я вставляю 5 в список, корень в основном становится узлом с 5. Для второй вставки я вставляю 2 в список, но на этот раз он должен установить свой родительский узел рядом с нулем.Узел передан как родительский узел при рекурсивном вызове не обновляется

При печати после обеих вставок, он должен отображать

This node's value is 5 

Но вместо этого, он по-прежнему показывает, что родителя рядом по-прежнему ссылаются на 2-ом узле.

This node's value is 5 
This node's value is 2 

Почему мой родитель.next = null не действует? Есть ли способ исправить это? У меня есть реализация, которая требует возможности изменить родителя.

ответ

1

Вы передаете значение null, null при вставке первого узла. Затем, какой узел public Node insert(Node node, Node parent, int value) вернется. Посмотрите еще раз

public void insert(int value){ 
     root = insert(root, root, value); 
    } 
+0

Я вижу! Я изменяю родительский элемент в следующем рекурсивном вызове, но как только я закончил этот вызов, узел возвращается без изменений в корневой каталог – Lucky

Смежные вопросы