2014-11-05 38 views
-2

我正在使用链接列表。我正在尝试创建一个循环链表,但我无法准确理解发生了什么。我曾试图将其映射出来,但最终我感到困惑。但我认为我最大的问题在这里请解释这行代码如何工作?

prevLoc,list,newNode和location都是链表节点。

这里是我不明白的路线。 newNode链接设置为空列表。 list = newNode是什么意思?这是否意味着它是newNode的任何元素?

if(prevLoc == null) 
    { 
     newNode.setLink(list); 
     list = newNode; 
    } 

以下是有关引用的排序类/添加方法的其余部分。

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

嗯,我不确定这本书。而我的教授的“教学”则是让我们直接从书中输入代码,而不是真正解释或回顾发生的事情。因此我已经转向堆栈溢出以获得关于它的意义的一些指导 – twjohns29 2014-11-05 23:09:26

回答

1
if(prevLoc == null) { 

壳体prevLoc == null如果element比列表的头部下只能发生。在这种情况下,元素必须添加到列表的头部:这就是其他两行的含义。

newNode.setLink(list); 
    list = newNode; 
} 

首先,我们创建了一个新的节点持有价值element和指向列表的头部。然后,我们更新list(它必须是列表的头部)以指向新创建的节点,因为它现在是列表的第一个节点。

0

当在列表的头部插入,节点你将需要在现有列表作为它的尾巴,你需要重新设置头指向新节点。所以我认为在这种情况下“list”=“头节点”。

0

list变量未在您提供的代码中定义,因此我们无法对此进行更多猜测。但是,如果您的类正在编译,那么list必须从超类CRefUnsortedList继承。据猜测,这是对列表头节点的引用,并且您询问的代码是当您插入列表开头时设置新的头节点。

+0

对我来说,“list”是列表的头部似乎很清楚。两个提示:首先,这是用于初始化列表上的迭代的节点,其次是用于在列表元素<= list(0)' – Dici 2014-11-05 22:41:29

+0

@Dici的情况下指向列表的新头的节点,if所提供的代码在* right *的任何位置,然后'list'确实应该是超类对列表头部的引用,正如你猜想的那样,我猜到了。但是,我看到了太多糟糕的代码,因此认为代码是正确的。 – 2014-11-05 22:45:44

+0

是的,列表来自未排序列表。 LLNode list; list = null; – twjohns29 2014-11-05 23:11:10