0

这是类头及其以下字段:

public class SinglyLinkedList <E> implements MiniList <E> 
{
   protected Entry <E> head = null;

   private int size = 0; 

我需要为我的实验室实现此方法,但我对 LinkedLists 一无所知:

   public boolean add(E element) 
   {

         //method should return true once element is added

         //EDIT: I THINK I SOLVED IT:
         head.element = element;
         return true;

         //Does everyone think the two lines above look correct?
   }

所以非常简单的问题,我对非随机访问数据结构很陌生。有人可以为我解决上述问题吗?我需要一个基础,这样我才能继续实验室的其余部分。

4

3 回答 3

1

最初,您的成员数据设置为空。如果这是一个要求(而不是最初分配它),您需要在 add() 方法中检查它并在必要时分配它:

if ( head == null )
{
    head = new Entry<E>();
    head.element = element;
}

如果 head 不为空,则必须分配一个新条目并允许现有数据通过让新数据引用它来保留列表的一部分:

else
{
    Entry<E> new_entry = new Entry<E>();
    new_entry.element = element;
    new_entry.next = head;
    head = new_entry;
}
于 2012-10-23T00:05:44.787 回答
1

好吧,链接列表的工作方式如下:

你有头节点,它有一个对下一个节点的引用,它有对下一个节点的引用,等等。这是我刚刚画的一个图表:

链表图

头部引用了以下节点,但其中也包含数据。因此,如果我创建一个字符串链接列表。

LinkedList<String> groceryList = new LinkedList<String>();
groceryList.add("VEGGIES");
groceryList.add("FRUITS");

头部有数据 VEGGIES,然后还有对列表中下一个对象的引用,换句话说,FRUITS 术语也是尾部。

假设我们的列表是空的。没有头,没有尾,没有数据。我们将这个头部指定为一个新条目。它将是列表中的第一个元素,也是我们访问列表的入口。如果列表不为空,为了添加到我们的列表中,我们必须访问列表中当前的最后一个元素。要做到这一点,我们必须顺着名单走。

//Some Pseudo Code
Entry current = head;
Entry last = null;
while(Not Done Looping)
{
    Entry temp = current.getNext();
    if(temp is not null) //We have a reference to another element
    {
        //We have more list to see
        current = temp;
    }
    else
        last = current;
}

这将给我们最后一个条目。然后为了添加另一个元素,我们只需将最后一个对象的引用设置为我们尝试添加的条目。

这就是它的工作原理。现在你只需要根据你的“Entry”对象来实现它。

于 2012-10-23T00:11:32.867 回答
0

我假设添加意味着向该列表添加一个元素?你试过什么?

您必须处理两种情况:

  1. 当列表为空时
  2. 当列表不为空时

想想在这两种情况下你需要做什么。

于 2012-10-22T23:55:43.377 回答