Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从普通链接列表创建已排序的链接列表_Java_Methods_Linked List_Sortedlist - Fatal编程技术网

Java 从普通链接列表创建已排序的链接列表

Java 从普通链接列表创建已排序的链接列表,java,methods,linked-list,sortedlist,Java,Methods,Linked List,Sortedlist,因为几个月前我刚开始编程,很多新信息即将出现,我很难跟上。所以我在这里创建了一个我认为是排序的链表。结果它没有排序 public boolean insert(Person person) { Node n = new Node(person); Node p = head; if(p == null) { head = n; size++; return true; } else { Node

因为几个月前我刚开始编程,很多新信息即将出现,我很难跟上。所以我在这里创建了一个我认为是排序的链表。结果它没有排序

public boolean insert(Person person) {
    Node n = new Node(person); 
    Node p = head;

    if(p == null) {
        head = n;
        size++;
        return true;
    } else {

        Node temp = p;
        int comparison;
        while(temp.next != null) {
            comparison = temp.person.name.compareTo(person.name);
            if(comparison == 0){
                return false;
            }
            temp = temp.next;
        }
        temp.next = n;
        size++;
        return true;
    }

}
该方法有效,它插入了人员,但他们没有按应有的顺序进行排序。我需要更改/删除代码的哪一部分才能进行排序


谢谢

您的
else
部件有问题。当给定相同的值时,返回的是
false
。但是,对于一个有效的案例,它并没有得到正确的解释

您需要具备以下条件

  • 检查当前节点值-检查空指针异常
  • 检查下一个节点值-检查空指针异常
  • 如果当前输入在currentNode和nextNode之间,则在两者之间插入
  • 如果到达最后一个节点,则在末尾插入

  • 您的
    else
    部件中有问题。当给定相同的值时,返回的是
    false
    。但是,对于一个有效的案例,它并没有得到正确的解释

    您需要具备以下条件

  • 检查当前节点值-检查空指针异常
  • 检查下一个节点值-检查空指针异常
  • 如果当前输入在currentNode和nextNode之间,则在两者之间插入
  • 如果到达最后一个节点,则在末尾插入

  • 您应该像这样插入:

    static boolean insert(Person person) {
            Node newNode = new Node(person);
    
            if (head == null) {
                head = newNode;
                size++;
                return true;
            }
    
            Node current = head;
            Node prev = null;
            int comparison;
    
            while (current != null) {
                comparison = person.name.compareTo(current.person.name);
                if (comparison == 0) {
                    return false;
                } else if (comparison > 0) { /// greater than
    
                    if (current.next == null) { // check if reach tail of the linked list add and break
                        current.next = newNode;
                        break;
                    }
                } else { // less then
                    if (prev == null) { // check if it should be first then put and break
                        Node oldHead = head;
                        head = newNode;
                        head.next = oldHead;
                        break;
                    }
                    prev.next = newNode;
                    newNode.next = current;
                    break;
                }
                prev = current;
                current = current.next;
            }
            size++;
            return true;
        }
    

    您应该像这样插入:

    static boolean insert(Person person) {
            Node newNode = new Node(person);
    
            if (head == null) {
                head = newNode;
                size++;
                return true;
            }
    
            Node current = head;
            Node prev = null;
            int comparison;
    
            while (current != null) {
                comparison = person.name.compareTo(current.person.name);
                if (comparison == 0) {
                    return false;
                } else if (comparison > 0) { /// greater than
    
                    if (current.next == null) { // check if reach tail of the linked list add and break
                        current.next = newNode;
                        break;
                    }
                } else { // less then
                    if (prev == null) { // check if it should be first then put and break
                        Node oldHead = head;
                        head = newNode;
                        head.next = oldHead;
                        break;
                    }
                    prev.next = newNode;
                    newNode.next = current;
                    break;
                }
                prev = current;
                current = current.next;
            }
            size++;
            return true;
        }
    

    您必须处理比较>0的情况。其中,您需要在当前节点之前插入新节点。您必须处理比较>0的情况。您需要在当前节点之前插入新节点的位置。嘿,再次感谢您。这些注释有助于我更好地理解程序本身。嘿,再次感谢您。这些注释也有助于我更好地理解程序本身。