师--链表的结点插入
Time Limit: 1000 ms Memory Limit: 65536 KiB
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
Hint
Source
#include <bits/stdc++.h>
using namespace std;
struct node
{
int data;
node *next;
};
void add(node *head, int a, int b);
void print(node *head)
{
node *p = head->next;
while (p)
{
if (p->next == NULL)
cout << p->data << endl;
else
cout << p->data << ' ';
p = p->next;
}
}
int cnt;
int main()
{
int n, a, b;
while(cin >> n)
{
cnt = 0;
node *head;
head = new node;
head->next = NULL;
for (int i=0; i<n; i++)
{
cin >> a >> b;
add(head, a, b);
}
print(head);
}
return 0;
}
void add(node*head, int a, int b)
{
node *p, *q;
if (a >= cnt) // 末尾加
{
p = head;
while (p->next != NULL)
p = p->next;
q = new node;
q->data = b;
q->next = NULL;
p->next = q;
cnt++;
return;
}
int num = 0;
p = head;
while(true) // 中间和开头加
{
if (num == a)
{
q = new node;
q->data = b;
q->next = p->next;
p->next = q;
break;
}
else
p = p->next;
num++;
}
cnt++;
}