From d749d0b975a2e9e1bc9ea0eb7dcfbf52706331aa Mon Sep 17 00:00:00 2001 From: Aaron Liao Date: Wed, 20 Mar 2024 23:32:14 +0800 Subject: [PATCH] Implement q_merge function Implement q_merge() to merge all queues into one sorted queue, which can be sorted in ascending or descending order. --- queue.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/queue.c b/queue.c index 46b2ec099..077635b99 100644 --- a/queue.c +++ b/queue.c @@ -249,6 +249,18 @@ int q_descend(struct list_head *head) * order */ int q_merge(struct list_head *head, bool descend) { - // https://leetcode.com/problems/merge-k-sorted-lists/ - return 0; + if (!head || list_empty(head)) + return 0; + + queue_contex_t *qc_first = list_first_entry(head, queue_contex_t, chain); + queue_contex_t *curr = NULL; + list_for_each_entry (curr, head, chain) { + if (qc_first == curr) + continue; + list_splice_init(curr->q, qc_first->q); + qc_first->size += curr->size; + curr->size = 0; + } + q_sort(qc_first->q, descend); + return qc_first->size; }