gpt4 book ai didi

java - 为什么Java中的链表头没有改变(尽管Java中的对象作为引用传递)?

转载 作者:行者123 更新时间:2023-12-02 04:15:03 25 4
gpt4 key购买 nike

下面的代码应该将头指针增加到链表中的下一个节点。然而,它并没有这样做。但头部数据的值正在改变。

changeHead(Node head)方法是将链表的头节点更改为链表的下一个节点。

有人可以帮我解决为什么只有数据值发生变化而链表的头指针没有变化吗?

class Node
{
int data;
Node next;
Node(int data)
{
this.data=data;
this.next=null;
}
}

class LinkedList
{
Node head;

public LinkedList() //constructor for LinkedList class
{
this.head=null;
}

void insert(int data)
{
Node s=new Node(data);
if(head==null)
{
head=s;
}
else
{
Node t=head;
while(t.next!=null)
t=t.next;
t.next=s;
}
}
}

class Main
{
public static void main(String[] args)
{
LinkedList ll=new LinkedList();
ll.insert(1);
ll.insert(2);
ll.insert(3);
ll.insert(4);
printList(ll.head); //calling method to print the list
changeHead(ll.head); //changing the head to the next node
printList(ll.head); //calling method to print the changed list

}
static void printList(Node head)
{
Node t=head;
while(t!=null)
{
System.out.print(t.data+" ");
t=t.next;
}
System.out.println();
}
static void changeHead(Node head)
{
head=head.next;
}

}


Output:
1 2 3 4
1 2 3 4

Expected output:
1 2 3 4
2 3 4

/*However if I change the function changeHead(Node head) as */
static void changeHead(Node head)
{
head.data=444;
}
then the output is as per expectations i.e.
1 2 3 4
444 2 3 4

最佳答案

由于引用 head 是按值传递的,并且您更改了该值(更改了引用指向的位置),因此调用者看不到任何更改。

如果您使用 head 的引用来更改 head 指向的某些内容,则该更改对每个人都可见。

关于java - 为什么Java中的链表头没有改变(尽管Java中的对象作为引用传递)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56666355/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com