gpt4 book ai didi

Java:链表节点问题

转载 作者:行者123 更新时间:2023-11-29 04:23:56 26 4
gpt4 key购买 nike

我正在学习链表并遇到了以下代码

public void add(WordMeaning wm)
{

WordMeaningNode data = new WordMeaningNode(wm);

if (head == null)
head = data;

else
{
WordMeaningNode current = head, prev = null;
boolean found = false;

while (current != null && !found)
{
if (data.getWordMeaning().getWord().compareTo(current.getWordMeaning().getWord()) < 0)
found = true;

else
{
prev = current;
current = current.next;
}

}

data.next = current;

if (prev == null)
head = data;

else
prev.next = data;


}

}

此代码用于获取单词和定义,然后将单词与 LinkedList 中的其他值按字母顺序排序。我了解如何在不按字母顺序排序的情况下将单词存储在 LinkedList 中,但我无法理解以 data.next = current 开头的最后一部分和随后的 if 语句。特别是 data.next 和 current 如何彼此相等,因为它们都应该为空。我也不明白为什么最后一个 else 语句中的 prev.next 不能替换为 current,因为它们应该是基于 while 循环中前面的 else 语句的相同值。

最佳答案

此代码将单词插入链表,以便生成的链表中的单词按升序排列。 data是新的有词节点; while 循环中的 if 条件正在检查 current 节点中的单词是否大于 data 节点中的单词。如果是这样,将 found 设置为 true,否则将 current 节点分配给前一个节点,将 current 的下一个节点分配给 current 节点。重复此过程,直到 while 中的条件评估为 false。

这里有两种情况:

  1. 一旦 current 节点中的单词大于 data 节点中的单词,found 变为 true。现在我们知道 current 节点中的单词按字母顺序大于 data 节点中的单词;所以将 current 节点作为 data 节点的下一个节点。这正是 data.next = current; 正在做的事情。我们还知道 data 节点中的单词按字母顺序大于 prev 节点中的单词,因此将 data 节点作为 prev< 的下一个节点 节点。这正是 elseprev.next = data; 所做的。
  2. 这种情况是列表为空时。当列表为空时,if (prev == null) head = data;data 节点作为 head 节点。

关于Java:链表节点问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47426453/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com