链接列表从列表中删除重复,引用混淆

时间:2017-10-07 22:20:24

标签: java data-structures linked-list

我无法理解下面这个方法如何删除链表中的重复项。调用此方法后,将成功删除所有重复项。为什么头不是空的? head节点不会为null,因为方法中的当前变量迭代到最后。此方法如何成功更新列表以删除重复项?

static boolean startsWithIgnoreCase(String line, String cmd) {
  return line.regionMatches(
      true         /* ignore case */,
      0            /* from start of line */,
      cmd          /* the thing you're searching for */,
      0            /* from start of cmd */,
      cmd.length() /* all of cmd */);
}

1 个答案:

答案 0 :(得分:0)

通过将指针从上一个元素更改为指向下一个元素来删除元素。这就是你删除LinkedList中的元素的方法。垃圾收集器稍后将删除该对象,因为没有对象再引用它。

以下是删除的说明:

Illustration

通过记住HashSet中的每个遇到的值来识别 。如果您发现之前已经遇到的元素(即包含在集合中),那么它就是重复

head无法获得null,因为它之前不是null,重复项只能在第一个元素之后出现,因为您需要遇到元素至少一次,直到你找到一个副本。例如,[1, 1, 1]之类的列表会被修改为[1],而不是[]

变量head在方法中也没有变化,它指向方法之前和之后的头节点。您似乎对current = head感到困惑,但您需要知道,在Java中,不同步这两个变量。如果方法更改为current,则head会反映 。该声明仅表示'current指向head'的位置,之后您将current指向其他位置。