【XDOJ2026秋数据结构】802.递增链表的插入【Compash个人题解】
递增链表的插入
问题描述
幼儿园小朋友要玩老鹰捉小鸡的游戏,老师把在场的小朋友按身高递增的顺序排好了队,这时有一位小朋友来晚了,老师需要把他按照身高插入到排好的队列中,请你帮助幼儿园老师把这位晚到的小朋友插入到队列中合适的位置。
输入说明
输入的第1行包含原队列长度N(任意int范围内的非负整数)与待插入的小朋友的身高值M(单位为cm);第2行包含N个递增的小朋友的身高值代表原递增数列。
输出说明
根据此递增数列,构造出递增链表,然后将M插入到链表中,输出插入后的链表对应的数列。数字间隔一个空格,但末尾不能有空格。
输入样例
//输入样例
6 100
99 102 104 105 107 110
输出样例
//输出样例
99 100 102 104 105 107 110
#include<iostream>
struct Kid
{
int val;
Kid* next = NULL;
Kid(int v) :val(v) {}
};
void insertKid(Kid*& head, int val)
{
Kid* newKid = new Kid(val);
if (head == NULL)
{
head = newKid;
return;
}
Kid* p = head;
while (p->next)
{
p = p->next;
}
p->next = newKid;
return;
}
void insertKidByVal(Kid*& head, int val)
{
Kid* newKid = new Kid(val);
if (head == NULL)
{
head = newKid;
return;
}
Kid dummy(0);
dummy.next = head;
Kid* prev = &dummy;
Kid* cur = head;
while (cur)
{
if (val > prev->val && val < cur->val)
{
prev->next = newKid;
newKid->next = cur;
return;
}
cur = cur->next;
prev = prev->next;
}
prev->next = newKid;
return;
}
void printKid(Kid* head)
{
Kid* p = head;
while (p)
{
std::cout << p->val << ' ';
p = p->next;
}
return;
}
int main()
{
Kid* kids = NULL;
int n, m, val;
std::cin >> n >> m;
for (int i = 0; i < n; i++)
{
std::cin >> val;
insertKid(kids, val);
}
insertKidByVal(kids, m);
printKid(kids);
return 0;
}

浙公网安备 33010602011771号