如何将元素添加到链表?

时间:2015-06-22 01:02:59

标签: java list

因此,项目的一部分方法要求我检查E元素是否已经在节点列表中。如果没有,那么我将元素添加到列表并返回true(因为方法是类型boolean)。但是,我的JUnit测试类中一直出现错误。所以我想知道我的代码目前有什么问题。这是方法:

public boolean add(E element) 
{
    for(Node ref = first; ref != null; ref = ref.next)
    {
        first  = new Node(element);

        if(!(element.equals(ref.data)))
        {
            n++;
            add(element);
            return true;
        }
        else if(element.equals(ref.data))
        {
            return false;
        }
    }
return false;
}

我很确定我格式化代码的方式是错误的。我不熟悉节点,因为我使用数组,因此这就是代码可能是一种耻辱的原因。顺便说一句,n是大小。

2 个答案:

答案 0 :(得分:1)

您的方法似乎将递归方法和迭代方法结合起来进行搜索,并且在任何情况下都不处理将新元素实际添加到列表中。

你没有指定新元素的添加位置(正面或背面),所以我假设正面。我还假设代码中的first是您班级的一个字段,因为它不会被声明。

递归解决方案在这里没有多大意义,并且在这种情况下我没有任何优势。所以这是一个迭代解决方案,如果没有找到,它会将新元素放在前面:

public boolean add(E element) 
{
    for (Node ref = first; ref != null; ref = ref.next)
    {
        if (element.equals(ref.data)) {
            return false;
        }
    }
    Node newFirst = new Node(element);
    newFirst.next = first;
    first = newFirst;
    return true;
}

答案 1 :(得分:0)

逻辑应该有两个部分:

  1. 如果元素存在与否,首先检查完整列表?如果它确实返回false而没有做任何其他操作则转到第2步。
  2. 如果元素不存在,则插入它并返回true
  3. 这显示在以下代码中:

    public boolean add(E element) 
    {
        boolean doesElementExist = false;
        //Step 1
        for(Node ref = first; ref != null; ref = ref.next)
        {
            if(element.equals(ref.data))
            {
                doesElementExist =  false;
                break;
            }
        }
        //Step 2
        if(!doesElementExist) {
          // Now we need to add element.
          Node newNode = new Node(element);
          newNode.next = first;
          first = newNode;
          doesElementExist = true;
        }
        return doesElementExist;
    }