Java中的LinkedListNode(破解编码干预)

时间:2017-01-04 05:11:51

标签: java

这可能是一个愚蠢的问题,因为我不是主修电脑。 我正在阅读破解编码面试,它有以下代码。

但是Java(在eclipse中)无法识别LinkedListNode,但它识别LinkedList。 我应该创建一个类名LinkedListNode,一个双链表吗?不应该像import java.util.*那样在LinkedList中使用java吗?

import java.util.*;
public static void deleteDups2(LinkedListNode head) {
    if (head == null) return;
    LinkedListNode previous = head;
    LinkedListNode current = previous.next;
    while (current != null) {
        LinkedListNode runner = head;
        while (runner != current) { // Check for earlier dups
            if (runner.data == current.data) {
                LinkedListNode tmp = current.next; // remove current
                previous.next = tmp; 
                current = tmp; // update current to next node
                break; // all other dups have already been removed
            }
            runner = runner.next;
        }
        if (runner == current) { // current not updated - update now
            previous = current;
            current = current.next;
        }
    }
}

3 个答案:

答案 0 :(得分:10)

LinkedListNode不是Java附带的类。本书后面的“代码库”部分(第XI节)包含LinkedListNode的实现。

我会在这里包含代码,但书中的版权声明不允许这样做。

答案 1 :(得分:0)

Java具有LinkedList<T>实现,仅供您使用。您可以使用LinkedList<T>而无需担心如何实施它。您无法更改实施或访问内部元素。

Java LinkedList<T> NodeNodevoidLink)定义如下

public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Queue<E>, Cloneable, Serializable {
    private static final long serialVersionUID = 876323262645176354L;
    transient int size;
    transient LinkedList.Link<E> voidLink;

LinkedList.Link类如下

private static final class Link<ET> {
    ET data;
    LinkedList.Link<ET> previous;
    LinkedList.Link<ET> next;

    Link(ET o, LinkedList.Link<ET> p, LinkedList.Link<ET> n) {
        this.data = o;
        this.previous = p;
        this.next = n;
    }
}

因此,您的示例只是Java链接列表实现的副本,您需要为此创建一个新的节点类。

答案 2 :(得分:-2)

LinkedListNode不是标准Java API类型之一,可以通过搜索https://docs.oracle.com/javase/8/docs/api/看到。这意味着从java.util导入无济于事,因为该包不包含该类型。什么包包含该类型?您的来源是否告诉您?

有三种主要的Java包,区别在于包的反序域名或域名:

  • java.**javax.**。这些软件包附带语言。
  • org.**。这些是&#34;非营利性的&#34;来自apache.org等地方的软件包
  • com.**。这些是&#34;商业&#34;包,来自Oracle或您自己。

java.util.**是第一种,语言附带的软件包。 LinkedListNode不在那里。这意味着它来自另外两个(可能是org.apache.**)来自http://apache.org的软件包之一。找出答案的一种方法是进行谷歌搜索,比如LinkedListNode。几个候选人出现。

也许您误读了LinkedList.Node中的私人类型LinkedList类型。 http://www.docjar.com/docs/api/java/util/LinkedList $ Node.html