解題觀念
Struct & Linked List
可以參考我的課程簡報:Struct & Linked List
題目敘述
你有一個破損的鍵盤,鍵盤上的所有鍵都可以正常工作
但有時 Home 鍵 ‘ [ ‘ 或者 End 鍵 ‘ ] ‘ 會自動按下
然而你並不知道鍵盤存在這一問題就繼續專心打稿子
當你開啟顯示器之後,展現在你面前的是一段悲劇的文字
現在你的任務是在開啟顯示器之前計算出這段悲劇文字
每組資料佔一行,包含不超過 100000 個字元
輸入結束標誌為檔案結束符 EOF
1 2 3
| // Sample Input This_is_a_[Beiju]_text [[]][][]Happy_Birthday_to_Tsinghua_University
|
Output
對於每組資料,輸出一行,即螢幕上的悲劇文字
1 2 3
| // Sample Output BeijuThis_is_a__text Happy_Birthday_to_Tsinghua_University
|
Solution Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
| #include<stdio.h> #include<stdlib.h>
typedef struct list_node *list_pointer;
typedef struct list_node{
char data; list_pointer link; }ListNode;
int main(){ char str[100000+5]; ListNode *head, *tail, *now;
while(scanf("%s", str) != EOF){ int begin;
for(begin = 0; str[begin] != '\0'; begin++){ if((str[begin] != '[') && str[begin] != ']'){ ListNode *new = malloc(sizeof(ListNode)); new->data = str[begin]; new->link = NULL; head = tail = now = new; break; } }
int i; for(i = begin+1; str[i] != '\0'; i++){ if(str[i] == '['){ now = NULL; } else if(str[i] == ']'){ now = tail; } else{ ListNode *new = malloc(sizeof(ListNode)); new->data = str[i];
if(now == NULL){ new->link = head; head = now = new; } else if(now == tail){ new->link = NULL; now->link = new; tail = now = new; } else{ new->link = now->link; now->link = new; now = new; } } } ListNode *j; for(j = head; j != NULL; j = j->link){ printf("%c", j->data); } printf("\n"); } return 0; }
|