小王子单链表问题

小王子有一天迷上了排队的游戏,桌子上有标号为 1-10的10个玩具,现在小王子将他们排成一列,可小王子还是太小了,他不确定他到底想把那个玩具摆在哪里,直到最后才能排成一条直线,求玩具的编号。已知他排了 M 次,每次都是选取标号为 X 个放到最前面,求每次排完后玩具的编号序列。要求一:采用单链表解决
输入描述   :  第一行是一个整数 M,表示小王子排玩具的次数。
随后 M 行每行包含一个整数 X,表示小王子要把编号为 X 的玩具放在最前面。
输出描述    :  共 M 行,第 i 行输出小王子第 i 次排完序后玩具的编号序列。

首先我们先创建结点

#include<iostream>
#include<malloc.h>
using namespace std;
typedef struct Node
{int data;
struct Node *next;
}LNode;

构建一个链表,将玩具的编号1-10放到链表中去

void head(LNode *&L)         //初始化链表
{L=(LNode *)malloc(sizeof(LNode));
L->next=NULL;}

void init(LNode *&L)         //头插法插入1-10
{
for(int i=10;i>=1;i--)
{LNode *s;
s=(LNode *)malloc(sizeof(LNode));
s->data=i;
s->next=L->next;
L->next=s;
}}

查找想要玩具的编号,并放到最前面 

void change(LNode *&L,int x)
{
LNode *before=L;               //记录前驱结点
LNode *team=L->next;
while(team!=NULL)
{
if(team->data==x)        
{before->next=team->next;  
team->next=L->next;
L->next=team;
break;}
before=team;
team=before->next;
}}

将每次排完序的链表展示出来

void show(LNode *L)
{LNode *sh=L->next;
while(sh!=NULL)
{cout<<sh->data<<" ";
sh=sh->next;
}
cout<<endl;
}

主函数

int main()
{LNode *L;
head(L);
init(L);
int N;
cin>>N;
for(int i=1;i<=N;i++)
{int x;
cin>>x;
change(L,x);
show(L);
}
return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值