【问题标题】:What is the difference between head=head.getNext() and head=current.getNext()?head=head.getNext() 和 head=current.getNext() 有什么区别?
【发布时间】:2014-02-24 02:01:03
【问题描述】:

我想实现一个LinkedListremove 方法来删​​除任何特定位置的项目,但在这种情况下,我最感兴趣的是删除列表开头(第零位)的项目。

我的代码适用于大于零的 n 值,因此我为 when n==0 编写了一个 if 语句,但我不明白为什么它不起作用,直到我用谷歌搜索了答案,在我看来这与我的答案相似写。

public class LinkedList<E> extends Node<E>{
public LinkedList(){}
public Node<E> head;
//removes node at n and returns contents of removed node; 
public E remove(int n){
    Node<E> current = head; T info;
    if(n==0){info=current.getInfo();
        head=current.getNext();return info;}
    }
}

我最初的陈述是head=head.getNext() 而不是head=current.getNext() 因此我的问题。两者有什么区别?

它们是否相同但执行方式不同? 谢谢

【问题讨论】:

  • 你知道,docs.oracle.com/javase/7/docs/api/java/util/… 已经存在了吗?你可以看看那个的源代码;)
  • 第一个修改了head(呃!),因此删除了“头”节点。第二个使任何current 指向的节点成为“头”。当然,在上面(有点荒谬)remove 方法中,current 在入口处总是设置为等于head,所以如果 n==0 则“头”节点将被删除。

标签: java generics setter getter singly-linked-list


【解决方案1】:

如果head 的值被分配给current(就像这里一样),它们应该是等价的。因为它们是对象,而不是原语,将一个分配给另一个使它们都引用同一个对象。因此,调用head.getNext()current.getNext() 应该都返回对同一对象的引用。

【讨论】:

    【解决方案2】:

    headthis.head 的简写)是对象属性,而current 是一个局部变量,仅在声明它的代码块内可见。

    当只是检索值时,没有区别,所以如果你真的改变了这一切,那么两个版本都应该可以工作。

    Modifygin 是不同的。更改current 时,更改不会反映到块外,如果函数完成,current 将被删除。但是,如果您更改 this.head,则您更改了存储在对象属性 y 中的引用,并且该更改将在函数结束后持续存在。

    【讨论】:

      猜你喜欢
      • 2011-01-14
      • 2021-07-04
      • 1970-01-01
      • 2019-09-03
      • 2018-06-25
      • 1970-01-01
      • 2023-03-23
      • 2020-06-15
      • 2021-10-28
      相关资源
      最近更新 更多