2017-02-12 104 views
0

我熟悉java中使用的'this'关键字,它用于引用当前对象。下面这段代码显示了一个链表的节点如何被创建:“object = this”in java

class Node { 
    Node next = null; 
    int data; 

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


    void appendToTail(int d) { 
     Node end = new Node(d); 
     Node n = this; 
     while (n.next != null) { 
      n = n.next; 
     } 
     n.next = end; 
    } 
} 

但在这里我不知道在什么上面下面的代码行指出:

Node n = this; 

我敢确定这里的'this'被引用到当前对象,但是这个对象的头部,尾部还是LinkedList中的任何其他节点?不知道我的问题是否合理,但非常感谢任何帮助。

+0

'Node n'声明一个类型为'Node'的变量'n'。 '= this'用'this'初始化变量'n',它也是'Node'类型。所以,在这条指令之后,'n'和'this'是对同一个对象的两个引用。头和尾是无关紧要的。我不明白“LinkedList中的头部或任何节点是什么?”手段。 –

+0

@JBNizet,只是改正了错字。我的意思是我们引用'this'关键字,还是仅仅是对一个节点的引用? – Aiguo

+1

当调用appendToTail时,'n'将具有与类(实例)相同的值。在这种情况下,它可以在当前实例上执行while循环。这与其他任何课程没有什么不同。 –

回答

3

我假设appendToTail(int d)方法将新创建的节点追加到列表的末尾,而不管它从哪个节点调用。

会发生什么事情是,必须找到列表的末尾才能将新节点附加到列表的末尾。由于我们知道它被调用的节点在列表中,因此这是一个理想的起点。因此我们选择起点作为“这个”节点。但是,这个节点不一定是列表的末尾(实际上它可能在列表中的任何地方),所以我们将它存储在一个临时变量Node n = this中,并继续更改我们的临时变量,直到它到达列表中的最后一个节点为止新节点可以被添加。

它相当于从一个列表中的随机点(this)开始,并从该点移动到结束点,无论它在哪里。

希望这回答了你的问题。

+0

谢谢@Theo,你解释的方式对于像我这样的初学者来说非常了解。 – Aiguo

+0

@Aiguo很高兴:)很高兴我能帮到你。 – TM00

3

我敢肯定,“这个”这里是参照当前对象

是啊。

但是这个对象的头部,尾部或LinkedList中的任何其他节点?

这取决于从哪里调用该方法,或者该列表是否包含this节点。

所有的方法都是为当前节点分配一个临时引用,以便它可以迭代。没有更多信息,你不能说哪个节点。


从评论 - 如果你的头叫appendToTail(),这将是头。如果你在尾巴上叫它,这将是尾巴。如果你在中间节点上调用它,这将是该中间节点。

+0

感谢您的帮助!你的回答非常有用:) – Aiguo