Problem Description
给出一个只有头指针的链表和 n 次操作,每次操作为在链表的第 m 个元素后面插入一个新元素x。若m 大于链表的元素总数则将x放在链表的最后。
Input
多组输入。每组数据首先输入一个整数n(n∈[1,100]),代表有n次操作。
接下来的n行,每行有两个整数Mi(Mi∈[0,10000]),Xi。
Output
对于每组数据。从前到后输出链表的所有元素,两个元素之间用空格隔开。
Sample Input
4
1 1
1 2
0 3
100 4
Sample Output
3 1 2 4
#include <stdio.h>
#include <stdlib.h>
typedef struct LNode *List;
struct LNode
{
int data;
List next;
};
void Print(List);
List charu(List,int,int);
int count;
int main()
{
int n;
while(~scanf("%d",&n))
{
count=0;
List head=NULL;
int i;
int mi,xi;
for(i=0; i<n; i++)
{
scanf("%d %d",&mi,&xi);
head=charu(head,mi,xi);
count++;
}
Print(head);
}
return 0;
}
void Print(List head)
{
List p=head;
while(p)
{
printf("%d",p->data);
if(p->next)
printf(" ");
else
printf("\n");
p=p->next;
}
}
List charu(List head,int m,int x)
{
List front=head;
List q=(List)malloc(sizeof(struct LNode));
q->next=NULL;
q->data=x;//创建新元素
if(m>=count)
{
//寻找到链表最后一个元素
List p=head;
while(p)
{
if(p->next==NULL)
{
front=p;
break;
}
p=p->next;
}
if(p==NULL)
head=q;
else
front->next=q;
}
else
{
List p=head;
if(m==0)
{
q->next=head;
head=q;
}
else
{
while(--m)
{
p=p->next;
}
front=p;
q->next=front->next;
front->next=q;
}
}
return head;
}
好好锻炼,有个好身体才能继续搞代码|—w—|☞