【发布时间】:2018-05-05 16:55:18
【问题描述】:
我正在学习链表并遇到以下代码
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.next 和 current 如何彼此相等” -- 你的问题不清楚......声明@ 987654323@ 是一个assignment,它将
current的值复制到data.next。在该语句之后,data.next将引用current所引用的同一对象。你有什么不明白的? -
一旦在 while 循环中找到匹配位置,您必须将数据节点与当前节点(从 while 循环中找到)和前一个节点链接。如果列表为空,则将元素添加到头部。这正在发生。 check this
标签: java linked-list