建立大根堆并使用头插法建立升序链表

#define _CRT_SECURE_NO_WARNINGS
#include <cstdio>
#include <iterator>
#include <queue>
using namespace std;

struct LinkNode {
    int data;
    LinkNode* next;
};

void printlist(LinkNode* head) {
    while (head != NULL) {
        printf("%d ", head->data);
        head = head->next;
    }
}

int main() {
    int n, a[1001];
    priority_queue<int> pq; // 大根堆只存储数据
    // 建立头结点,头指针head始终指向头结点,无论链表是否为空
    LinkNode* head = new LinkNode;
    head->next = NULL;
    while (scanf("%d", &n) != EOF) {
        for (int i = 0; i < n; i++) {
            scanf("%d", &a[i]);
            pq.push(a[i]);
        }
        // 建立大根堆并使用头插法建立升序链表
        while (!pq.empty()) {
            int out = pq.top();
            pq.pop();
            LinkNode* newnode = new LinkNode;
            newnode->data = out;
            newnode->next = NULL;
            if (head->next == NULL) { // 是第一个结点,直接插到头结点后面
                head->next = newnode;
            }
            else {
                newnode->next = head->next;
                head->next = newnode;
            }
        }
        printlist(head->next); // 传入第一个有效数据结点
        printf("\n");
    }
    return 0;
}