java - 对象在没有该对象引用的情况下得到更新?

标签 java list data-structures singly-linked-list

//I have a Node.java Class

public class Node{

    int data;
    Node next;

    public Node(int d) {
        data = d;
    }
}

//And another java class

class LinkedList {

    Node head;

    public static void main(String[] args) {
        LinkedList list = new LinkedList();
        //Executing this loop
        for (int i = 0; i < 5; i++) {

            **list.add(i);**

        }
    }

     void add(int value){
        Node newNode = new Node(value);

        if(head == null )//Very first time its create the head object when i = 0
        {
            head = newNode;
        }else if(head.next == null){//This is for when i value is 1
            head.next  = newNode;
        }else{ //else part execute i >= 2
            //Created new node with head.next which mean value 1.And head is 0
            Node temp = head.next; 
            // Just need this object initialization for reference
            Node temp1 = newNode; 
             //Checking head.next is null or not if its null skip this loop execution
            while(temp != null)
            {
                temp1 = temp; 
                 temp = temp.next;
            }
            // Here we set newNode.next to null
            newNode.next = temp1.next; 
            temp1.next = newNode;
        }
    }
}

My Question is here , when temp1.next = newNode; line execute head object have added one next value.

** //例如如果head = 0,head.next = 1 when temp1.next = newNode;行 execute head.next.next = 2 被添加到 head 中。当我们没有 head 对象引用时,它是如何发生的。

最佳答案

您没有更新头对象。 您正在更新 head.next 对象。

所以

head.next.next

可以这样写:

Node nextFromHead = head.next; // nextFromHead is 1
Node nextFromNextFromHead = nextFromHead.next; // nextFromNextFromHead is 2

head.next.nextnextFromNextFromHead 是同一个对象,但它(节点为 2)与头节点没有任何直接连接。

我认为这将有助于更好地理解引用在 Java 中的工作方式。

public class LinkedList {

    static Node head;

    public static void main(String[] args) {

        LinkedList list = new LinkedList();
        for(int i = 0; i < 5; i++)

            list.add(i);

        Node currentNode = head; // in java we don't need object initialization for reference. Node temp1; would work just fine

        System.out.println("==head node== " + currentNode);
        while(currentNode.next != null) {

            // here we increment
            currentNode = currentNode.next;

//            System.out.println("Last time we in here, next is null so print only current");
            System.out.println("==next node== " + currentNode);
        }
    }

    void add(int value){
        Node newNode = new Node(value);

        if(head == null )//Very first time its create the head object when i = 0
        {
            head = newNode;
        }else if(head.next == null){//This is for when i value is 1
            head.next  = newNode;
        }else{ //else part execute i >= 2
            //Created new node with head.next which mean value 1.And head is 0
            Node temp = head.next;
            // Just need this object initialization for reference
            Node temp1 = newNode;
            //Checking head.next is null or not if its null skip this loop execution
            while(temp != null)
            {
                temp1 = temp;
                temp = temp.next;
            }
            // Here we set newNode.next to null
            System.out.println("  ==temp1== " + temp1);// before
            newNode.next = temp1.next;
            temp1.next = newNode;
            System.out.println("  ==temp1== " + temp1);// and after
        }

        System.out.println("==current node== " + head);
        System.out.println();
    }
}

Node 类带有额外的 toString() 以正确查看对象。

public class Node {

    int data;
    Node next;

    public Node(int d) {
        data = d;
    }

    @Override
    public String toString() {
        return "Node{" +
                "data=" + data +
                ", next=" + next +
                '}';
    }
}

关于java - 对象在没有该对象引用的情况下得到更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38883479/

相关文章:

java - 如何让 "Date"对象在每次调用时打印出不同的值?

java - 通过子查询缩小查询结果

java - 我在 java 的各种 CDI 限定符中看到的 values() 是什么?

Python 列表困惑

python - 如何删除列表中彼此相邻的重复值之一?

string - Trie 插入或读取操作中的逻辑问题

java - 如何重新实现 System.out.print()

Python:如何在引用所有创建的项目的类中实现静态列表以及删除项目的简单方法?

c++ - 2D线段树,矩形之和

java - 是否可以在 O(1) 时间内进行搜索?