将元素添加到双链表

时间:2016-02-09 18:38:39

标签: java data-structures linked-list

我有一项任务是在双链表中按索引添加string类型的元素。我将它实现为类Double_list的方法。我也有类List_node。

public void Add(String element, int index)
{
    if(index < 0 || index > size)
    {
        throw new IndexOutOfBoundsException();
    }
    if(element == null)
    {
        throw new NullPointerException();
    }
    if(index == size)
    {
        this.Add(element);
    }
    else
    {
        List_node next_node = get_node(index);
        List_node prev_node = next_node.prev;

        List_node new_node = new List_node(element, prev_node, next_node);

        next_node.prev = new_node;
        prev_node.next = new_node;
        size++;
    }
}

public boolean Add(String element)
{
    if(element == null)
    { 
        throw new NullPointerException();
    }

    List_node last = tail.prev;

    List_node new_node = new List_node(element, last, tail);
    last.next = new_node;
    last.prev = new_node;

    size++;
    return true;
}

private List_node get_node(int index)
{
    int cur_index = 0;
    List_node cur_node = head.next;

    while(cur_index < index)
    {
        cur_node = cur_node.next;
        cur_index++;
    }
    return cur_node;
}

当我添加多个元素时,列表的大小会增加,但列表会以这样的方式显示,就像我只添加了一个元素。当我尝试从列表中删除大于0的索引元素时,我得到NullPointerException。 你能帮助我并告诉我,我在哪里犯了错误吗?

1 个答案:

答案 0 :(得分:2)

问题(添加,至少,我不能确定在没有看到代码的情况下删除)是你永远不会更新尾部。你在列表的尾部添加一个新元素,然后当你添加另一个元素时,你将第一个元素抛出并替换它,因为tail仍然是它开始的位置。

Add中,将last.prev = new_node;更改为tail.prev = new_node;