师--链表的结点插入
Time Limit: 1000MS
Memory Limit: 65536KB
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
Hint
Author
01 | #include<stdio.h> |
02 | #include<string.h> |
03 | #include<stdlib.h> |
04 | struct chain |
05 | { |
06 | int data; |
07 | struct chain *next; |
08 | }; |
09 | int main() |
10 | { |
11 | int n, num, sum, count; |
12 | while (~ scanf ( "%d" , &n)) |
13 | {sum = 0; |
14 | struct chain *p, *q, *head; |
15 | head = ( struct chain *) malloc ( sizeof ( struct chain)); |
16 | head->next = NULL; |
17 | sum = 0; |
18 | while (n--) |
19 | { |
20 | count = 0; |
21 | q = head; |
22 | p = ( struct chain *) malloc ( sizeof ( struct chain)); |
23 | scanf ( "%d%d" , &num, &p->data); |
24 | if (num <= sum) |
25 | { |
26 | while (count <= num) |
27 | { |
28 | if (count == num) |
29 | { |
30 | p->next = q->next; |
31 | q->next = p; |
32 | break ; |
33 | } |
34 | q = q->next; |
35 | count++; |
36 | } |
37 | } |
38 | else |
39 | { |
40 | while (q->next) |
41 | q = q->next; |
42 | q->next = p; |
43 | q = p; |
44 | q->next = NULL; |
45 | } |
46 | sum++; |
47 | } |
48 | q = head->next; |
49 | while (q) |
50 | { |
51 | printf ( "%d" , q->data); |
52 | if (q->next) |
53 | printf ( " " ); |
54 | else |
55 | printf ( "\n" ); |
56 | q = q->next; |
57 | } |
58 | } |
59 | return 0; |
60 | } |