fork download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. class No{
  5. public:
  6. int dado;
  7. No *next;
  8. No(int item, No *ptr= NULL){
  9. dado=item;
  10. next=ptr;
  11. }
  12. };
  13.  
  14. class Lista{
  15. public:
  16. Lista(){
  17. first = last = NULL;
  18. };
  19. bool listaVazia();
  20. void inserirInicio(int item);
  21. void inserirFim(int item);
  22. void inserirPosicao(int item, int posicao);
  23. void buscaItem(int item);
  24. void removeInicio();
  25. void removeFim();
  26. void removeItem(int item);
  27. void imprimirLista();
  28. int tamanhoLista = 0;
  29. bool posicaoValida(int posicao);
  30. private:
  31. No *first, *last;
  32. };
  33.  
  34.  
  35. bool Lista::listaVazia(){
  36. return first == NULL;
  37. }
  38.  
  39. void Lista::inserirInicio(int item){
  40. first = new No(item,first);
  41. tamanhoLista++;
  42. if(last == NULL)
  43. last = first;
  44. }
  45.  
  46. void Lista::inserirFim(int item){
  47. tamanhoLista++;
  48. if(last != NULL){
  49. last->next = new No(item);
  50. last = last->next;
  51. }else{
  52. first = last = new No(item);
  53. }
  54. }
  55.  
  56. void Lista::inserirPosicao(int item,int posicao){
  57. if(posicaoValida(posicao)){
  58. if(posicao == 1){
  59. inserirInicio(item);
  60. }else{
  61.  
  62. // LOGICA PARA IMPLEMENTAR EM OUTRAS POSICOES
  63. }
  64. }else{
  65. cout << endl << " POSICAO INVALIDA" << endl;
  66. }
  67.  
  68. }
  69.  
  70. void Lista::buscaItem(int item){
  71. bool found = false;
  72. if(listaVazia()){
  73. cout << endl << " LISTA VAZIA" << endl;
  74. }else{
  75. No *aux;
  76. aux = first;
  77. while(aux != NULL){
  78. if(aux->dado == item){
  79. cout << endl << " O VALOR: " << item << " FOI ENCONTRADO NA POSICAO: " << tamanhoLista << endl;
  80. found = true;
  81. }
  82. aux = aux->next;
  83. }
  84. if(!found){
  85. cout << endl << " VALOR NAO ENCONTRADO." << endl;
  86. }
  87. }
  88. }
  89.  
  90. void Lista::removeInicio(){
  91.  
  92. if(listaVazia()){
  93. cout << endl << " LISTA VAZIA" << endl;
  94. }else{
  95. tamanhoLista--;
  96. if(first == last){
  97. delete first;
  98. first = last = NULL;
  99. }else{
  100. first = first->next;
  101. }
  102. }
  103. }
  104. void Lista::removeFim(){
  105. if(listaVazia()){
  106. cout << endl << " LISTA VAZIA" << endl;
  107. }else{
  108. if(tamanhoLista == 1){
  109. removeInicio();
  110. return;
  111. }else{
  112. No *aux,*ant;
  113. aux = first;
  114.  
  115. while(aux->next!= NULL){
  116. ant = aux;
  117. aux=aux->next;
  118. }
  119. ant->next = NULL;
  120. delete aux;
  121. tamanhoLista--;
  122. }
  123. }
  124. }
  125. void Lista::removeItem(int item){
  126. if(listaVazia()){
  127. cout << endl << " LISTA VAZIA" << endl;
  128. } else if(tamanhoLista == 1 || first->dado == item) {
  129. removeInicio();
  130. return;
  131. } else {
  132. No *ant = first;
  133. No *atu = ant->next;
  134. while(atu != NULL){
  135. if(atu->dado == item) {
  136. break;
  137. } else {
  138. ant = atu;
  139. atu = atu->next;
  140. }
  141. }
  142. if(atu != NULL) {
  143. if (last == atu) {
  144. last = ant;
  145. }
  146. ant->next = atu->next;
  147. delete atu;
  148. tamanhoLista--;
  149. }
  150. }
  151. }
  152.  
  153. void Lista::imprimirLista(){
  154. if(listaVazia()){
  155. cout << endl << " LISTA VAZIA" << endl;
  156. }else{
  157. No *aux;
  158. int i = 0;
  159. aux = first;
  160. while(aux != NULL){
  161. cout << endl << " VALOR: " << aux->dado << " INDICE: " << i++ << endl;
  162. aux = aux->next;
  163. }
  164. }
  165.  
  166. }
  167. bool Lista::posicaoValida(int posicao){
  168. return ( (posicao > 0) && (posicao <= tamanhoLista));
  169. }
  170.  
  171. int main() {
  172. Lista obj;
  173. obj.inserirFim(1);
  174. obj.inserirFim(2);
  175. obj.inserirFim(3);
  176. obj.imprimirLista();
  177. obj.removeItem(2);
  178. obj.imprimirLista();
  179. }
  180.  
  181. //https://pt.stackoverflow.com/q/54546/101
Success #stdin #stdout 0s 4416KB
stdin
Standard input is empty
stdout
     VALOR: 1 INDICE: 0

     VALOR: 2 INDICE: 1

     VALOR: 3 INDICE: 2

     VALOR: 1 INDICE: 0

     VALOR: 3 INDICE: 1