Problem Description
给出一个只有头指针的链表和 n 次操作,每次操作为在链表的第 m 个元素后面插入一个新元素x。若m 大于链表的元素总数则将x放在链表的最后。
Input
多组输入。每组数据首先输入一个整数n(n∈[1,100]),代表有n次操作。
接下来的n行,每行有两个整数Mi(Mi∈[0,10000]),Xi。
Output
对于每组数据。从前到后输出链表的所有元素,两个元素之间用空格隔开。
Example Input
4 1 1 1 2 0 3 100 4
Example Output
3 1 2 4
01 |
|
02 | #include<stdlib.h> |
03 | struct node |
04 | { |
05 | int date; |
06 | struct node *next; |
07 | } *head, *p, *q; |
08 | int main() |
09 | { |
10 | int n, m, x, i, j; |
11 | while ( scanf ( "%d" , &n) != EOF) |
12 | { |
13 | head = ( struct node *) malloc ( sizeof ( struct node)); |
14 | head -> next = NULL; |
15 | for (j = 0; j < n; j++) |
16 | { |
17 | scanf ( "%d%d" , &m, &x); |
18 | p = ( struct node *) malloc ( sizeof ( struct node)); |
19 | p -> date = x; |
20 | q = ( struct node *) malloc ( sizeof ( struct node)); |
21 | q = head; |
22 | if (m <= j) |
23 | { |
24 | for (i = 1; i <= m; i++) |
25 | { |
26 | q = q -> next; |
27 | } |
28 | p -> next = q -> next; |
29 | q -> next = p; |
30 | } |
31 | else |
32 | { |
33 | while (q -> next != NULL) |
34 | { |
35 | q = q -> next; |
36 | } |
37 | p -> next = q -> next; |
38 | q -> next = p; |
39 | } |
40 | } |
41 | q = head -> next; |
42 | while (q != NULL) |
43 | { |
44 | printf ( "%d" , q -> date); |
45 | if (q -> next != NULL) |
46 | { |
47 | printf ( " " ); |
48 | } |
49 | else |
50 | { |
51 | printf ( "\n" ); |
52 | } |
53 | q = q-> next; |
54 | } |
55 | } |
56 | return 0; |
57 | } |