📌  相关文章
📜  用于对 0、1 和 2 的链表进行排序的Java程序(1)

📅  最后修改于: 2023-12-03 15:40:53.754000             🧑  作者: Mango

用于对 0、1 和 2 的链表进行排序的Java程序

这是一个基于计数排序思想的Java程序,用于对只包含0、1或2的链表进行排序。

思路分析
  1. 创建数组 count ,分别记录链表中值为0,1,2的节点出现的次数。
  2. 遍历链表,更新数组 count
  3. 根据数组 count 重新构建链表。
代码实现
定义链表节点类
class ListNode {
    int val;
    ListNode next;
    ListNode(int x) { val = x; }
}
编写排序函数
public ListNode sortList(ListNode head) {
    int[] count = new int[3];
    ListNode cur = head;

    // Step 1: count the frequency of 0, 1, and 2 occurrences
    while (cur != null) {
        count[cur.val]++;
        cur = cur.next;
    }

    // Step 2: reconstruct the list
    cur = head;
    for (int i = 0; i < count[0]; i++) {
        cur.val = 0;
        cur = cur.next;
    }
    for (int i = 0; i < count[1]; i++) {
        cur.val = 1;
        cur = cur.next;
    }
    for (int i = 0; i < count[2]; i++) {
        cur.val = 2;
        cur = cur.next;
    }

    return head;
}
小结

通过这个程序,我们可以看到用计数排序思想来排序只包含几个固定值的链表,可以非常高效地完成,时间复杂度为O(n),无论是链表长度还是链表中节点值的可能性,都对算法的运行时间没有影响。