我有一个非常简单的问题,我无法理解我应该如何进一步进行。
我有一个双向链表,其中第一个节点为空对象,最后一个节点为空对象。
我有一个各种字符串元素,我想将其插入到第一个和最后一个节点之间。例如 - 我有字符串元素“C”、“D”、“A”、“P”。
插入双向链表后。我需要一些像这样的插入订单-
FirstNullObject P D C A LastNullObject
所以我不确定应该如何将空对象与我想要比较并继续添加的各种字符串进行比较。假设首先我要添加 C,然后我必须以某种方式在这两个空对象之间插入 C。然后,如果我添加 D,那么我必须将 D 与 C 进行比较,然后列表应该像这样 -
FirstNullObject DC LastNullObject
这里newLink是像C、D一样的newNode,而firstNode是null对象。但这不起作用。我总是遇到异常(exception)。
if (newLink.data.compareToIgnoreCase(list.firstNode.data) > 0) {
//logic
}
我希望问题很清楚
最佳答案
您从未提出过问题,所以不,问题不清楚。
可能是“如何确定一个对象是否为空?”答案:
o == null
可能是“我如何确定我位于链表的末尾?”答案:当下一个节点为空时,您就有了最终节点。
可能是“我如何表示链表中的结束节点?”答案:它与任何节点相同,但引用列表中下一个节点的字段为空。
可能是,“我怎样才能拥有一个既可以是列表节点,又可以是 null 的字段?我需要一些神奇的 NodeONull,还是……?”答案:该字段只有您的节点的类型,您只需将其分配为空即可。阅读 section 4.1
可能是,“我怎样才能拥有一个既可以是列表的字符串成员,又可以有时作为列表的哨兵的特殊值的字段?”回答:呃,什么?节点的“值”字段与列表的结构完全无关。你问这个问题表明你的代码已经在荒野中了,应该回头引用你的类(class) Material 来了解你到底要处理什么。
我知道你谈到了双向链表;这些答案对他们来说都没有改变。是的,我认为以上任何一项都可能是您正在寻找的答案。
编辑:
and firstNode is null object
是的,你在荒野中。
除非从技术上讲,您的哨兵不是一个节点。
您的哨兵没有您感兴趣的 .data 字段。
您实际上在这里所做的 - 或者当您遇到错误时,半途而废 - 正在尝试拥有列表的特殊“第一个”、“最后一个”和“中间”节点。三种不同类型的节点,也许您还想到了“空列表”对象。由于这很愚蠢,您可能只是因为不明白自己要做什么而这样做。
你要做的更像是
class Cons {
public String data;
public Cons prev;
public Cons next;
Cons(String data, Cons prev, Cons next) { ... }
}
空列表:null
单成员列表:new Cons("a", null, null);
三人名单:
Cons list = new Cons("a", null, null);
list.next = new Cons("b", list, null);
list.next.next = new Cons("c", list.next, null);
正如从链接列表移动到双向链表时没有太大变化一样,从 Java 提供的 Cons 的特殊子类型(即 null
)移动到您自己的子类型时也没有太大变化它的子类型。
关于java - 比较字符串与空对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9348990/