2016-03-09 39 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 

但是,相反,它仍然表明,父母的未來仍然是鏈接到第二個節點。

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

爲什麼我的parent.next = null生效?有沒有辦法來解決這個問題?我有一個需要修改父項的實現。

回答

1

您在插入第一個節點時傳遞null,null。然後,公共Node insert(Node node, Node parent, int value)將返回哪個節點。再看看

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

我明白了!我在下一次遞歸調用中修改父對象,但只要完成該調用,節點就會返回而不修改根目錄 – Lucky