Java排序双向链表添加方法

标签 java addition sorting doubly-linked-list

我在完成一项分配给我的任务时遇到了一些极端困难。

作业是在java中创建4​​种不同的数据结构:LinkedList、DoublyLinked list、deque和sorted doublylinked list。除了排序方法中的 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) 这不太正确。 我只是不确定发生了什么事。我无法发布所有尝试过的解决方案,因为我已经删除了其中的大部分。

最佳答案

我发现您的代码很难阅读和理解。如果您发布整个类(class),这样我们就知道您确切的变量定义等,那就太好了。

我在您的代码逻辑中发现的错误如下:

    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;
}

编辑:完整代码已被删除。

关于Java排序双向链表添加方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13315299/

相关文章:

java - 类加载、静态 block

java - 如何使用 Spring 以一种 Restful 方式过滤数据?

c - 电阻的串联和并联

linux - 查找字符串并添加字符串

java - 自定义身份验证管理器配置

java - last == i背后的直觉?

c++ - 使用代码 :Blocks on Linux 的 C++ 函数中的 "Not Declared in scope"

python - 尝试创建一个仅包含唯一数字的排序列表

c - 将数组传递给函数时的双指针间接

php - 为什么 usort (php) 即使不返回整数也能工作?