Advertisement
Guest User

Untitled

a guest
Jan 17th, 2017
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.62 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef struct lista {
  5. int w;
  6. struct lista* nast;
  7. } lista;
  8.  
  9.  
  10. void wypiszListe(lista* listaa) {
  11. lista* temp=listaa;
  12. while(temp) {
  13. printf("%d",temp->w);
  14. temp=temp->nast;
  15. }
  16. printf("\n");
  17. }
  18.  
  19. void dodajWezel(lista* lista) {
  20.  
  21. }
  22.  
  23. lista* odwrocListe(lista* listaa) {
  24. lista *aktualny_wezel = listaa, *nastepny_wezel;
  25. listaa = NULL;
  26.  
  27. while (aktualny_wezel != NULL) {
  28. nastepny_wezel = aktualny_wezel->nast;
  29. aktualny_wezel->nast = listaa;
  30. listaa = aktualny_wezel;
  31. aktualny_wezel = nastepny_wezel;
  32. }
  33.  
  34. return listaa;
  35. }
  36.  
  37.  
  38. lista* SumaU2(lista* l1, lista* l2){
  39. int buffer, suma, l1_value, l2_value, koniec_l1=0, koniec_l2=0;
  40. lista *temp, *head_result, *prev;
  41.  
  42. prev=(lista*)malloc(sizeof(lista));
  43. head_result=prev;
  44.  
  45. l1=odwrocListe(l1);
  46. l2=odwrocListe(l2);
  47.  
  48. buffer = 0;
  49.  
  50. while(l1||l2)
  51. {
  52. prev->nast = malloc(sizeof(lista));
  53.  
  54. l1_value = (l1) ? l1->w : koniec_l1;
  55. l2_value = (l2) ? l2->w : koniec_l2;
  56. suma = l1_value + l2_value + buffer;
  57.  
  58. prev->nast->w = suma % 2;
  59. buffer = (suma > 1);
  60.  
  61. if((l1)&&(!(l1->nast))) koniec_l1=l1->w;
  62. if((l2)&&(!(l2->nast))) koniec_l2=l2->w;
  63.  
  64. if(l1) l1 = l1->nast;
  65. if(l2) l2 = l2->nast;
  66.  
  67.  
  68.  
  69. prev = prev->nast;
  70. }
  71. if(koniec_l1==koniec_l2) {
  72. prev->nast=malloc(sizeof(lista));
  73. prev->nast->w=koniec_l1;
  74. prev->nast->nast=NULL;
  75. }
  76. else prev->nast=NULL;
  77.  
  78. head_result=head_result->nast;
  79.  
  80. head_result=odwrocListe(head_result);
  81.  
  82. prev=head_result;
  83.  
  84. while( prev->nast && prev->w == prev->nast->w)
  85. {
  86. temp = prev;
  87. prev = prev->nast;
  88. free(temp);
  89. }
  90. head_result=prev;
  91.  
  92. return head_result;
  93. }
  94.  
  95.  
  96.  
  97. int main()
  98. {
  99. lista* suma;
  100.  
  101. lista* l1=(lista*)malloc(sizeof(lista));
  102. l1->w=0;
  103. l1->nast=(lista*)malloc(sizeof(lista));
  104. l1->nast->w=1;
  105. l1->nast->nast=(lista*)malloc(sizeof(lista));
  106. l1->nast->nast->w=1;
  107. l1->nast->nast->nast=(lista*)malloc(sizeof(lista));
  108. l1->nast->nast->nast->w=1;
  109. l1->nast->nast->nast->nast=NULL;
  110.  
  111. lista* l2=(lista*)malloc(sizeof(lista));
  112. l2->w=1;
  113. l2->nast=(lista*)malloc(sizeof(lista));
  114. l2->nast->w=0;
  115. l2->nast->nast=(lista*)malloc(sizeof(lista));
  116. l2->nast->nast->w=1;
  117. l2->nast->nast->nast=(lista*)malloc(sizeof(lista));
  118. l2->nast->nast->nast->w=0;
  119. l2->nast->nast->nast->nast=NULL;
  120.  
  121. wypiszListe(l1);
  122. wypiszListe(l2);
  123.  
  124. suma=SumaU2(l1,l2);
  125.  
  126. wypiszListe(suma);
  127. return 0;
  128. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement