-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmesclaListas_eda1.c
116 lines (108 loc) · 2.9 KB
/
mesclaListas_eda1.c
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#include<stdlib.h>
typedef struct celula{
int dado;
struct celula *prox;
} celula;
void mescla_listas(celula *l1, celula *l2, celula *l3){
l3->prox = NULL;
if(l1->prox == NULL){
l3->prox = l2->prox;
l2->prox = NULL;
free(l2);
return;
}
else if(l2->prox == NULL){
l3->prox = l1->prox;
l1->prox = NULL;
free(l1);
return;
}
else if(l1->prox == NULL && l2->prox == NULL){
free(l1);
free(l2);
return;
}
else {
celula *atual, *ultimo=NULL;
int temp;
atual = l1;
while (atual->prox != NULL) { //achando o ultimo termo da lista 1, para conectar com a lista 2
atual = atual->prox;
}
atual->prox = l2->prox; //dando free na cabeca da lista2
free(l2);
l3->prox = l1->prox; //dando free na cabeca da lista1
free(l1);
atual = l3->prox;
while (ultimo != l3->prox) { //ordenando a lista
while (atual->prox != ultimo) {
if (atual->dado > atual->prox->dado) {
temp = atual->dado;
atual->dado = atual->prox->dado;
atual->prox->dado = temp;
}
atual = atual->prox;
}
ultimo = atual;
atual = l3->prox;
}
}
}
/*
void mescla_listas(celula *l1, celula *l2, celula *l3){
int flag = 0;
l3->prox = NULL;
if(l1->prox == NULL){
l3->prox = l2->prox;
l2->prox = NULL;
free(l2);
return;
}
else if(l2->prox == NULL){
l3->prox = l1->prox;
l1->prox = NULL;
free(l1);
return;
}
else if(l1->prox == NULL && l2->prox == NULL){
free(l1);
free(l2);
return;
}
else {
celula *atualL1, *atualL2,*atualL3;
atualL1 = l1->prox;
atualL2 = l2->prox;
atualL3 = l3;
while(flag == 0){
if(l2->prox == NULL && l1->prox == NULL){
flag = 1;
}
else if(atualL1 == NULL){
atualL3->prox = atualL2;
l2->prox = NULL;
}
else if(atualL2 == NULL){
atualL3->prox = atualL1;
l1->prox = NULL;
}
else if(atualL1->dado < atualL2->dado){
atualL3->prox = atualL1;
l1->prox = atualL3->prox->prox;
atualL3 = atualL3->prox;
atualL3->prox = NULL;
atualL1 = l1->prox;
}
else if(atualL2->dado < atualL1->dado){
atualL3->prox = atualL2;
l2->prox = atualL3->prox->prox;
atualL3 = atualL3->prox;
atualL3->prox = NULL;
atualL2 = l2->prox;
}
}
free(l1);
free(l2);
}
}
*/