【问题标题】:How do I sort a linked list?如何对链表进行排序?
【发布时间】:2017-03-22 11:27:28
【问题描述】:

我在对链表进行排序时遇到问题。 当我使用这段代码时,编译器进入一个无限循环并且不做任何事情,我被要求更改插入代码以对代码进行排序

public void insert(int val) {
    Node currentNode = head;
    Node nextNode = head.next;

    if (currentNode.num > val) {
        Node tmpNode = head;
        head = new Node(val);
        head.next = tmpNode;
        return;
    }

    if (nextNode != null && nextNode.num > val) {
        currentNode.next = new Node(val);
        currentNode.next.next = nextNode;
        return;
    }

    while (nextNode != null && nextNode.num < val) {
        currentNode = nextNode;
        nextNode = nextNode.next;
    }

    currentNode.next = new Node(val);
    currentNode.next.next = nextNode;
}

但这就是我带来的,它看起来很糟糕。

这必须对链表进行排序......我想!?

public void sort() {
    Node currentNode = head;
    Node nextNode = head.next;
    while (nextNode != null) {
        if (currentNode.num > currentNode.next.num) {
            Node tmpNode = currentNode;
            currentNode.num = currentNode.next.num;
            currentNode.next.num = tmpNode.num;
        }
    }
}

【问题讨论】:

  • 你永远不会在循环中设置nextNode。但即使你愿意,它仍然不会对列表进行排序。这样就可以摆脱无限循环。
  • 你所拥有的只是一个代码 sn-p 帖子,它散发着低效的味道。如果您寻求帮助理解,您需要更好地了解您卡在哪里。添加一些个人注释(例如代码 cmets)来表达您认为代码在做什么,人们可以理解您的想法中的任何错误并提供相应的帮助。
  • 你是什么意思insert更改为排序方法?这是两个完全不同的东西。此外,您的插入功能已经使列表保持排序。 (它不会检查 head == null 是否 - 只是作为旁注)。
  • 这是重点....这是问题很奇怪的问题

标签: java arrays sorting linked-list


【解决方案1】:

我假设您希望在插入自身时对链表进行排序。这样您就不需要其他功能来对其进行排序。您没有考虑头部将为空的初始场景,这只是错误

public void insert(int val) {
    Node currentNode = head;
    Node nextNode = head.next;

    if (head == null) {
        head = new Node(val);
        head.next = null;
        return;
    }

    if (currentNode.num > val) {
        Node tmpNode = head;
        head = new Node(val);
        head.next = tmpNode;
        return;
    }

    if (nextNode != null && nextNode.num > val) {
        currentNode.next = new Node(val);
        currentNode.next.next = nextNode;
        return;
    }

    while (nextNode != null && nextNode.num < val) {
        currentNode = nextNode;
        nextNode = nextNode.next;
    }

    currentNode.next = new Node(val);
    currentNode.next.next = nextNode;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-08
    • 1970-01-01
    • 2010-10-20
    • 1970-01-01
    • 2017-03-26
    相关资源
    最近更新 更多