Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- typedef struct lista {
- int w;
- struct lista* nast;
- } lista;
- void wypiszListe(lista* listaa) {
- lista* temp=listaa;
- while(temp) {
- printf("%d",temp->w);
- temp=temp->nast;
- }
- printf("\n");
- }
- void dodajWezel(lista* lista) {
- }
- lista* odwrocListe(lista* listaa) {
- lista *aktualny_wezel = listaa, *nastepny_wezel;
- listaa = NULL;
- while (aktualny_wezel != NULL) {
- nastepny_wezel = aktualny_wezel->nast;
- aktualny_wezel->nast = listaa;
- listaa = aktualny_wezel;
- aktualny_wezel = nastepny_wezel;
- }
- return listaa;
- }
- lista* SumaU2(lista* l1, lista* l2){
- int buffer, suma, l1_value, l2_value, koniec_l1=0, koniec_l2=0;
- lista *temp, *head_result, *prev;
- prev=(lista*)malloc(sizeof(lista));
- head_result=prev;
- l1=odwrocListe(l1);
- l2=odwrocListe(l2);
- buffer = 0;
- while(l1||l2)
- {
- prev->nast = malloc(sizeof(lista));
- l1_value = (l1) ? l1->w : koniec_l1;
- l2_value = (l2) ? l2->w : koniec_l2;
- suma = l1_value + l2_value + buffer;
- prev->nast->w = suma % 2;
- buffer = (suma > 1);
- if((l1)&&(!(l1->nast))) koniec_l1=l1->w;
- if((l2)&&(!(l2->nast))) koniec_l2=l2->w;
- if(l1) l1 = l1->nast;
- if(l2) l2 = l2->nast;
- prev = prev->nast;
- }
- if(koniec_l1==koniec_l2) {
- prev->nast=malloc(sizeof(lista));
- prev->nast->w=koniec_l1;
- prev->nast->nast=NULL;
- }
- else prev->nast=NULL;
- head_result=head_result->nast;
- head_result=odwrocListe(head_result);
- prev=head_result;
- while( prev->nast && prev->w == prev->nast->w)
- {
- temp = prev;
- prev = prev->nast;
- free(temp);
- }
- head_result=prev;
- return head_result;
- }
- int main()
- {
- lista* suma;
- lista* l1=(lista*)malloc(sizeof(lista));
- l1->w=0;
- l1->nast=(lista*)malloc(sizeof(lista));
- l1->nast->w=1;
- l1->nast->nast=(lista*)malloc(sizeof(lista));
- l1->nast->nast->w=1;
- l1->nast->nast->nast=(lista*)malloc(sizeof(lista));
- l1->nast->nast->nast->w=1;
- l1->nast->nast->nast->nast=NULL;
- lista* l2=(lista*)malloc(sizeof(lista));
- l2->w=1;
- l2->nast=(lista*)malloc(sizeof(lista));
- l2->nast->w=0;
- l2->nast->nast=(lista*)malloc(sizeof(lista));
- l2->nast->nast->w=1;
- l2->nast->nast->nast=(lista*)malloc(sizeof(lista));
- l2->nast->nast->nast->w=0;
- l2->nast->nast->nast->nast=NULL;
- wypiszListe(l1);
- wypiszListe(l2);
- suma=SumaU2(l1,l2);
- wypiszListe(suma);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement