我在add()
方法中将head
作为参数传递。我在public static void main(String args[])
中调用add()
方法。它什么都不打印。但是,如果我不将head
作为参数传递,那么它将打印链表。为什么会发生这种情况?
没有打印任何内容的代码:
public class linkedListI {
static Node head;
static class Node {
int data;
Node next;
Node(int data) {
this.data = data;
}
}
static void add(Node head, int data) {
Node new_node = new Node(data);
if (head == null) {
head = new_node;
head.next = null;
}
Node current = head;
while (current.next != null) {
current = current.next;
}
current.next = new_node;
new_node.next = null;
}
static void printLinkedList(Node head) {
Node curr = head;
while (curr != null) {
System.out.print(curr.data + " ");
curr = curr.next;
}
}
public static void main(String args[]) {
// linkedListI l = new linkedListI();
add(head, 3);
add(head, 4);
add(head, 6);
add(head, 7);
printLinkedList(head);
}
}
提供输出的代码:
此代码打印输出,但我没有将head
作为参数传递到add()
方法中。
public class linkedListI {
static Node head;
static class Node {
int data;
Node next;
Node(int data) {
this.data = data;
}
}
static void add(int data) {
Node new_node = new Node(data);
if (head == null) {
head = new_node;
head.next = null;
}
Node current = head;
while (current.next != null) {
current = current.next;
}
current.next = new_node;
new_node.next = null;
}
static void printLinkedList(Node head) {
Node curr = head;
while (curr != null) {
System.out.print(curr.data + " ");
curr = curr.next;
}
}
public static void main(String args[]) {
// linkedListI l = new linkedListI();
add(3);
add(4);
add(6);
add(7);
printLinkedList(head);
}
}
原因是在您的第一个版本中,您有:
static void add(Node head, int data)
这意味着该函数中对head
的任何引用都将是局部变量,而不是在脚本顶部定义的类成员。
由于该参数是局部变量,当您为其分配新值时,没有人会知道它,只有函数的执行上下文。调用代码在head
中不会看到任何更改,因为参数是按值传递的。因此CCD_ 10在每次呼叫CCD_ 12之后将保持CCD_。
如果您希望它以这种方式工作——将head
作为参数传递——那么请更改add
函数的签名,以便它将head
的最终值返回给调用者,然后调用者必须将其重新分配给自己的head
变量:
static void add(Node head, int data) {
Node new_node = new Node(data);
new_node.next = null;
if (head == null) {
return new_node; // this is the new head
}
Node current = head;
while (current.next != null) {
current = current.next;
}
current.next = new_node;
return head; // head did not change
}
// ....
public static void main(String args[]) {
head = add(head, 3);
head = add(head, 4);
head = add(head, 6);
head = add(head, 7);
printLinkedList(head);
}