请解释这行代码如何工作?

时间:2014-11-05 22:32:07

标签: java linked-list

我正在使用链接列表。我正在尝试制作一个循环链表,但我无法准确理解发生了什么。我试图将其映射出来,但我最终感到困惑。但我认为我最大的问题就在这里

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++;
    }
}

3 个答案:

答案 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继承。猜测,它是对列表头部节点的引用,当您在列表的开头插入时,您询问的代码是设置一个新的头节点。