저는 Java에 익숙하지 않고 연결된 목록을 구현하려고합니다. (이 목적을 위해 목록 클래스가 존재한다는 것을 알고 있지만, 처음부터이 클래스를 사용하면 언어가 내부적으로 어떻게 작동하는지 이해할 수 있습니다)객체 값 null
주 방법에서는 4 개의 노드를 선언하고 3을 초기화합니다. 연결된 목록의 헤드 노드는 null로 설정됩니다. 매개 변수 head 및 newNode를 사용하여 add 함수를 처음 호출하면 head가 null이므로 머리를 초기화하고 newNode의 값을 this에 할당합니다. main 메서드에서 head 객체가 add 메서드에서 설정 한 새 값을 가져야합니다. 그러나 머리는 여전히 null입니다.
왜 그런지 이해해 주셔서 감사합니다.
코드가 깨끗하지 않으면 죄송합니다. 감사합니다.
public class LinkedList
{
public void add(Node newNode, Node head)
{
if(head == null)
{
head = new Node();
head = newNode;
}
else
{
Node temp = new Node();
temp = head;
while(temp.next!=null)
{
temp = temp.next;
}
temp.next = newNode;
}
}
public void traverse(Node head)
{
Node temp = new Node();
temp = head;
System.out.println("Linked List:: ");
while(temp.next!=null);
{
System.out.println(" " + temp.data);
temp = temp.next;
}
}
public static void main(String args[])
{
Node head = null;
Node newNode = new Node(null, 5);
Node newNode2 = new Node(null, 15);
Node newNode3 = new Node(null,30);
LinkedList firstList = new LinkedList();
firstList.add(newNode,head);
// Part that I don't understand
// why is head still null here?
if(head==null)
{
System.out.println("true");
}
firstList.traverse(head);
firstList.add(newNode2,head);
firstList.traverse(head);
firstList.add(newNode3,head);
firstList.traverse(head);
}
}
public class Node
{
public Node next;
public int data;
public Node(Node next, int data)
{
this.next = next;
this.data = data;
}
public Node()
{
this.next = null;
this.data = 0;
}
}
당신은 [찾을 수를 제공해야 이 게시물] (http://stackoverflow.com/questions/40480/is-java-pass-by-reference) interesting. 코드 상단에'head = new Node()'라고 쓰면 인수의 로컬 복사본을 변경하지만 호출 코드에서 값을 변경하지는 않습니다. – assylias
디버깅을 위해 취한 조치는 무엇입니까? –