AcWing 3376. 成绩排序2(使用链表直接插入)
原题链接
简单
C++ 代码
#include<bits/stdc++.h>
using namespace std;
//链表节点
typedef struct node {
int p, q;
struct node* next;
}Node;
int main() {
int k;//循环次数
int m, n;//每次输入的p、q
//定义头节点并初始化
Node* head = (Node*)malloc(sizeof(Node));
head->p = 0;
head->q = 0;
head->next = NULL;
cin >> k;
while (k--) {
cin >> m >> n;
//初始化新节点
Node* temp = (Node*)malloc(sizeof(Node));
temp->p = m;
temp->q = n;
temp->next = NULL;
//临时节点,用户确定新节点位置
Node* temp_head = head;
//判断新节点应该插入的位置
if (head->next == NULL) {//头结点没有后继直接插入
head->next = temp;
} else {//否则按照条件移动临时节点
while (temp_head->next != NULL) {
if (temp->q > temp_head->next->q || (temp->q == temp_head->next->q && temp->p > temp_head->next->p))
temp_head = temp_head->next;
else
break;
}
//插入新节点
temp->next = temp_head->next;
temp_head->next = temp;
}
}
//输出
while (head->next != NULL) {
head = head->next;
cout << head->p << ' ' << head->q << endl;
}
return 0;
}