师--链表的结点插入
Time Limit: 1000MS
Memory Limit: 65536KB
Submit
Statistic
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 | #include <stdio.h> |
02 | #include <stdlib.h> |
03 | struct node |
04 | { |
05 | int data; |
06 | struct node *next; |
07 | }; |
08 | int main() |
09 | { |
10 | int n, i, j, m, x, count = 0; |
11 | while ( scanf ( "%d" , &n)!=EOF) |
12 | { |
13 | struct node *head, *p, *tail; |
14 | head = ( struct node*) malloc ( sizeof ( struct node)); |
15 | head->next = NULL; |
16 | count = 0; |
17 |
18 | for (i = 0; i<n; i++) |
19 | { |
20 | scanf ( "%d%d" , &m, &x); |
21 | p = ( struct node *) malloc ( sizeof ( struct node)); |
22 | tail = head; |
23 | if (m>count) |
24 | { |
25 | while (tail->next!=NULL) |
26 | { |
27 | tail = tail->next; |
28 | } |
29 | } |
30 | else |
31 | { |
32 | for (j = 0; j<m; j++) |
33 | { |
34 | tail = tail->next; |
35 | } |
36 | } |
37 | p->next = tail->next; |
38 | tail->next = p; |
39 | p->data = x; |
40 | count++; |
41 | } |
42 | tail = head->next; |
43 | while (tail->next!=NULL) |
44 | { |
45 | printf ( "%d " , tail->data); |
46 | tail = tail->next; |
47 | } |
48 | printf ( "%d\n" , tail->data); |
49 | } |
50 | return 0; |
51 | } |