【问题标题】:Creating a sorted link list out of a normal linked list从普通链表创建排序链表
【发布时间】:2020-05-16 15:02:13
【问题描述】:

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

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

}

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

谢谢!

【问题讨论】:

  • 你必须处理比较>0 case。你需要在当前节点之前插入新节点。

标签: java methods linked-list sortedlist


【解决方案1】:

你应该这样插入:

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

【讨论】:

  • 嘿,sc0der,非常感谢你。还有 cmets 帮助我更好地理解程序本身。
【解决方案2】:

您的else 部分存在问题。当给出相同的值时,您将返回 false。但是对于有效的情况,它没有被正确解释。

你需要有如下。

  1. 检查当前节点值 - 检查空指针异常
  2. 检查下一个节点值 - 检查空指针异常
  3. 如果当前输入在 currentNode 和 nextNode 之间,则在其间插入。
  4. 如果到达最后一个节点,则在末尾插入

【讨论】:

    猜你喜欢
    • 2020-09-18
    • 1970-01-01
    • 1970-01-01
    • 2011-05-13
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    相关资源
    最近更新 更多