Java排序Doubly Linked List添加方法

时间:2012-11-09 20:14:57

标签: java add sorted doubly-linked-list

我遇到过一项极为困难的任务。

该任务是在java中创建4​​个不同的数据结构,LinkedList,DoublyLinked列表,deque和已排序的双链表。除了排序方法中的add方法之外,我几乎拥有所有内容。

我一直在尝试不同的事情大约4个小时,每次我这样做,我给出的测试用例都失败了。

我正在发布我当前的代码,它不能按照我想要的方式运行。如果有人可以通过观察它来判断,我需要修复什么,这将是非常棒的。我也可以将代码发布到其他方法和其他东西。 谢谢!

public void add(T item) {
    if (head.getData() == null) {
        head = new Node(item);
        tail = new Node(null);
        tail.setPrev(head);
        head.setNext(tail);
        count++;
    } else if (((Comparable<T>) head.getData()).compareTo(item) >=0) {
        Node tempNode = head;
        head = new Node(item);
        head.setNext(tempNode);
        tempNode.setPrev(head);
        count++;

    } else {
        Node current = head.getNext();
        for (int i = 1; i < size()  && current.getData() != null; i++) {
            if (((Comparable<T>) current.getData()).compareTo(item) > 0) {
                current = current.getNext();
            } else if  (((Comparable<T>) current.getData()).compareTo(item) <= 0) {
                Node newNode = new Node(item);
                current.getPrev().setNext(newNode);
                newNode.setNext(current);
                newNode.setNext(current.getPrev());
                current.setPrev(newNode);
                count++;
                break;
            } 
        }
        tail = new Node(item);
        current.setNext(tail);
        tail.setPrev(current);
        count++;
        return;
    }
}

编辑一:

好的,我可以修复演员的事情,但这并不能完全帮助我想要完成的事情。对于我的问题含糊不清或不清楚部分,我们深表歉意。这有点难以解释。 我也得到了很多测试用例,比如这个:

 public void testAddAll() {
    SortedDLL<Integer> list = new SortedDLL<Integer>();
    assertEquals(0, list.size());

    Integer[] objects = {32,0,5125,-12};
    Integer[] sorted = {-12,0,32,5125};
    list.addAll(objects);
    assertEquals(4, list.size());

    for (int i = 0; i < objects.length; i++) {
        assertEquals(sorted[i], list.get(i));   
    }
}

当我为最后一部分执行此操作时(使用system.out.println而不是assertEquals): (-12,-12) (0,0) (32,5125) (5125,0) 这不太对劲。 我只是不确定发生了什么。我无法发布所有尝试过的解决方案,因为我删除了大部分解决方案。

1 个答案:

答案 0 :(得分:2)

我发现您的代码难以阅读和理解。如果您发布了整个课程,那么我们就知道您的确切变量定义等。

我在代码逻辑中可以找到的错误如下:

    tail = new Node(item);
    current.setNext(tail);
    tail.setPrev(current);
    count++;
    return;

这应该改为:

if ( current == tail ) {
    tail = new Node(item);
    current.setNext(tail);
    tail.setPrev(current);
    count++;
    return;
}

编辑:已删除完整代码。