繁体   English   中英

如何对链表进行排序?

[英]How do I sort a linked list?

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM