正如标题所暗示的,我试图在Java中实现一个双向链表。
然而,在研究它时,我遇到了一些我难以理解的问题。
关于上下文,这是我的代码:
public class Doublelist{
Node head;
public static class Node{
private int data;
private Node prev;
private Node next = null;
public Node (int data){
this.data = data;
prev = null;
next = null; //default case for new node
}
public String toString(){
String i = Integer.toString(data);
return i;
}
//Method below handles inputting data at end of the linked list
public static Doublelist add_node_end(Doublelist list, int data){
Node add_node = new Node(data);
add_node.next = null;
if (list.head == null){
list.head = add_node;
list.head.prev = null;
}
else{
Node travel = list.head;
while (travel.next != null){
travel = travel.next;
}
add_node.prev = travel;
travel.next = add_node;
}
return list;
}
public static void modify_obj_test (Doublelist list){
Node travel = list.head;
System.out.println("Travel initially: "+ travel);
Node currnode = travel;
travel.next.next = null;
System.out.println("Travel.next.next: "+ travel.next.next);
System.out.println("Currnode.next.next: "+ currnode.next.next);
}
}
HERE是显示我遇到的问题的方法:((注:我创建此方法只是为了说明我的理解,对链接列表不做任何事情))>
public static void modify_obj_test (Doublelist list){ Node travel = list.head; System.out.println("Travel initially: "+ travel); Node currnode = travel; travel.next.next = null; System.out.println("Travel.next.next: "+ travel.next.next); System.out.println("Currnode.next.next: "+ currnode.next.next); }
此输出给出以下内容
Travel initially: 1 Travel.next.next: null Currnode.next.next: null
但是,当我更改此功能并执行以下操作时
public static void modify_obj_test (Doublelist list){ Node travel = list.head; System.out.println("Travel initially: "+ travel); Node currnode = travel; travel = travel.next; travel = travel.next; travel = null; System.out.println("Travel.next.next: "+ travel); System.out.println("Currnode.next.next: "+ currnode.next.next); }
然后输出变为
Travel initially: 1 Travel.next.next: null Currnode.next.next: 3
我的问题是,为什么当我使travel.next.next = null时对currnode.next.next进行修改,但是当我通过travel = travel.next逐一向下移动列表时,它不会影响currnode变量吗?
我以为,使currnode = travel有点像在C中创建一个temp变量,在该变量进行操作时该值的副本保持安全,我没有意识到,取决于我如何修改travel变量,也会影响currnode变量。
正如标题所暗示的,我试图在Java中实现一个双向链表。但是,在处理它时,我遇到了一些我难以理解的问题。对于上下文,这是我的代码:public ...
为什么当我使travel.next.next = null时修改了currnode.next.next