fork(1) download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef struct ptr_list
  5. {
  6. char input;
  7. struct ptr_list *prev;
  8. struct ptr_list *next;
  9. } ptr_L;
  10.  
  11. int idx = 0;
  12. int length = 0;
  13. ptr_L *head = NULL;
  14. ptr_L *current;
  15.  
  16. void insert_list(char str);
  17. void delete_list(void);
  18. void print_list(void);
  19. void free_list(void);
  20.  
  21. int main(void)
  22. {
  23. int n, i;
  24. char str;
  25.  
  26. scanf("%d",&n);
  27. getchar();
  28.  
  29. for(i=0; i<n; i++)
  30. {
  31. do
  32. {
  33. scanf("%c",&str);
  34. if(str == '<')
  35. {
  36. if(idx > 0)
  37. {
  38. idx--;
  39. if(idx > 0)
  40. current = current->prev;
  41. }
  42. continue;
  43. }
  44. if(str == '>')
  45. {
  46. if(idx < length)
  47. {
  48. idx++;
  49. if(current->next != NULL)
  50. current = current->next;
  51. }
  52. continue;
  53. }
  54. if(str == '-')
  55. {
  56. if(idx != 0 && idx <= length)
  57. delete_list();
  58. continue;
  59. }
  60. if(str != '\n')
  61. insert_list(str);
  62. }while(str != '\n');
  63. print_list();
  64. idx = length = 0;
  65. free_list();
  66. }
  67. return 0;
  68. }
  69. void insert_list(char str)
  70. {
  71. ptr_L *L = (ptr_L *)malloc(sizeof(ptr_L));
  72. L->input = str;
  73.  
  74. if(idx == 0)
  75. {
  76. if(!head)
  77. L->next = NULL;
  78. else
  79. {
  80. L->next = head;
  81. head->prev = L;
  82. }
  83. L->prev = NULL;
  84. head = L;
  85. current = head;
  86. }
  87. else
  88. {
  89. L->prev = current;
  90. L->next = current->next;
  91. if(current->next != NULL)
  92. L->next->prev = L;
  93. L->prev->next = L;
  94. current = current->next;
  95. }
  96. length++;
  97. idx++;
  98. }
  99. void delete_list(void)
  100. {
  101. ptr_L *temp, *temp2;
  102. int i;
  103.  
  104. if(idx == 1)
  105. {
  106. temp = head;
  107. if(head->next != NULL)
  108. {
  109. head = temp->next;
  110. head->prev = NULL;
  111. }
  112. else
  113. head = NULL;
  114. free(temp);
  115. current = head;
  116. }
  117. else
  118. {
  119. temp = current;
  120. temp2 = current->prev;
  121. if(temp->next != NULL)
  122. temp->next->prev = temp2;
  123. temp2->next = temp->next;
  124. free(temp);
  125. current = temp2;
  126. }
  127. length--;
  128. idx--;
  129. }
  130. void print_list(void)
  131. {
  132. ptr_L *temp;
  133. for(temp = head; temp != NULL; temp = temp->next)
  134. printf("%c",temp->input);
  135. printf("\n");
  136. }
  137. void free_list(void)
  138. {
  139. ptr_L *temp;
  140. current = NULL;
  141. while(head)
  142. {
  143. temp = head;
  144. head = head->next;
  145. free(temp);
  146. }
  147. }
Time limit exceeded #stdin #stdout 5s 89024KB
stdin
1
A
stdout
Standard output is empty