难以理解对象并在Java链接列表中修改它们的变量

问题描述 投票:1回答:1

正如标题所暗示的,我试图在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 ...

java object variables linked-list doubly-linked-list
1个回答
2
投票

为什么当我使travel.next.next = null时修改了currnode.next.next

© www.soinside.com 2019 - 2024. All rights reserved.