fork download
  1. //
  2. // Created by samsu dhuha on 28/02/19.
  3. //
  4.  
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7.  
  8. typedef struct node{
  9. int val;
  10. struct node* next;
  11. } node_t;
  12.  
  13. typedef struct linklist{
  14. node_t* head;
  15. node_t* tail;
  16. }linklist_t;
  17.  
  18. void pop_back(linklist_t* lk) {
  19. if (lk->tail == NULL)return;
  20. if (lk->tail == lk->head) {
  21. free(lk->tail);
  22. lk->head = NULL;
  23. lk->tail = NULL;
  24. return;
  25. } else {
  26. node_t *tmp = lk->head;
  27.  
  28. while (tmp->next != lk->tail) {
  29. tmp = tmp->next;
  30. }
  31. lk->tail = tmp;
  32. free(tmp->next);
  33. tmp->next = NULL;
  34. }
  35. return;
  36. }
  37.  
  38. void push_back(int value, linklist_t* lk, int *node) {
  39. node_t *box = (node_t *) malloc(sizeof(node_t));
  40. box->val = value;
  41. box->next = NULL;
  42.  
  43. while ((*node != 0) && (box->val > lk->tail->val)) {
  44. pop_back(lk);
  45. *node -= 1;
  46. }
  47.  
  48. *node += 1;
  49.  
  50. if (lk->head == NULL) {
  51. lk->tail = box;
  52. lk->head = box;
  53. } else {
  54. lk->tail->next = box;
  55. lk->tail = box;
  56. }
  57. return;
  58. }
  59.  
  60. void printALL(linklist_t* lk) {
  61. node_t *tmp = lk->head;
  62. while (tmp != NULL) {
  63. if(tmp->next != NULL) {
  64. printf("%d ", tmp->val);
  65. }
  66. else{
  67. printf("%d", tmp->val);
  68. }
  69. tmp = tmp->next;
  70. }
  71. printf("\n");
  72. return;
  73. }
  74.  
  75. int main(){
  76. linklist_t *posisi = (linklist_t *) malloc(sizeof(linklist_t));
  77. posisi->head = NULL;
  78. posisi->tail = NULL;
  79.  
  80. int testcase, banyak_batu, berat_batu;
  81. scanf("%d", &testcase);
  82. for (int i = 0; i < testcase; i++) {
  83. scanf("%d", &banyak_batu);
  84. int awalan = 0;
  85. posisi->head = NULL;
  86. posisi->tail = NULL;
  87. for (int j = 0; j < banyak_batu; j++) {
  88. scanf("%d", &berat_batu);
  89. push_back(berat_batu,posisi, &awalan);
  90. }
  91. printALL(posisi);
  92. }
  93. }
  94.  
  95.  
Success #stdin #stdout 0s 4512KB
stdin
1
20
3 5 2 7 5 9 6 4 87 6 4 3 7 9 6 4 2 4 5 7
stdout
87 9 7