我正在使用链接列表。我正在尝试制作一个循环链表,但我无法准确理解发生了什么。我试图将其映射出来,但我最终感到困惑。但我认为我最大的问题就在这里
prevLoc,list,newNode和location都是链接列表节点。
这是我不明白的路线。 newNode链接设置为list为null。 list = newNode是什么意思?这只是意味着它是newNode的元素吗?
if(prevLoc == null)
{
newNode.setLink(list);
list = newNode;
}
以下是referenece的其他已排序类/ add方法。
public class CRefSortedList<T extends Comparable<T>>
extends CRefUnsortedList<T>
implements ListInterface<T>
{
public CRefSortedList()
{
super();
}
public void add(T element)
{
LLNode<T> prevLoc;
LLNode<T> location;
T listElement;
location = list;
prevLoc = null;
while(location != null)
{
listElement = location.getInfo();
if(listElement.compareTo(element) < 0)
{
prevLoc = location;
location = location.getLink();
}
else
{
break;
}
}
LLNode<T> newNode = new LLNode<T>(element);
if(prevLoc == null)
{
newNode.setLink(list);
list = newNode;
}
else
{
newNode.setLink(location);
prevLoc.setLink(newNode);
}
numElements++;
}
}
答案 0 :(得分:1)
if(prevLoc == null) {
案例prevLoc == null
只有在element
低于列表头部时才会发生。在这种情况下,必须将元素添加到列表的头部:这是另外两行的含义。
newNode.setLink(list);
list = newNode;
}
首先,我们创建一个新节点,其中包含值element
并指向列表的头部。然后,我们更新list
(必须是列表的头部)以指向新创建的节点,因为它现在是列表的第一个节点。
答案 1 :(得分:0)
当插入列表的头部时,您要插入的节点需要将现有列表作为尾部,您需要重新设置头部以指向新节点。所以我认为&#34; list&#34; =&#34;头节点&#34;在这种情况下。
答案 2 :(得分:0)
list
变量未在您提供的代码中定义,因此我们做的不仅仅是猜测它。但是,如果您的类编译,那么list
必须从超类CRefUnsortedList
继承。猜测,它是对列表头部节点的引用,当您在列表的开头插入时,您询问的代码是设置一个新的头节点。