📅  最后修改于: 2023-12-03 15:40:53.754000             🧑  作者: Mango
这是一个基于计数排序思想的Java程序,用于对只包含0、1或2的链表进行排序。
count
,分别记录链表中值为0,1,2的节点出现的次数。count
。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),无论是链表长度还是链表中节点值的可能性,都对算法的运行时间没有影响。