Ir ao conteúdo
  • Cadastre-se

C++ Listas iguais com funcoes do c++


giovany93

Posts recomendados

Please!!! Someone helpe me!!!

  Eu estou tentando pegar duas listas de int e comparar um a um , mas esta dando algo errado.

Segue a lógica: 

Se pelo uma das listas tiver um unico elemento , compare  esse  com o ultimo elemento da outra lista (se for igual retorna 1) senao compara

     com o  primeiro dessa outra lista.  

Caso as lista tenham ambas mais de um elemento vamos comparar desde do inicio de ambas se nao as listas nao for iguais , compararemos desde o inicio da primeira até o fim desta e desde o fim da segunda até o inicio desta.

O erro eh q eh para apresentar yes quando sao iguais e no quando nao .Em alguns casos esta acontecendo erro...

#include <iostream>

#include <list>
using namespace std;
int iteration(list<int> lista,list<int> lista2);
int main(){
    list<int>lista,lista2;
    int n,i,v;
    cin>>n;
    while(n){
        for(i=1;i<=n;i++)lista2.push_back(i);
         
       while(cin>>v&&v){
                   lista.push_front(v);
                   for(i=1;i<n;i++){
                       cin>>v;
                       lista.push_front(v);
                   }
            if(iteration(lista,lista2))cout<<"Yes"<<endl;
            else cout<<"No"<<endl;
         lista.clear();
            }       
            lista2.clear();
   cin>>n;
    }
    //lista.push_back(i);
    //lista.push_front(i);
    //cout << lista.front() << endl;
    //cout << lista.back() << endl;
    //cout << lista.size() << endl;
   // lista.insert(it,2,11);

    cout << endl;
   //lista.erase(it);// printa o 3 que agora é o novo ultimo elemento da listacout << lista.back() << endl;
       //cout << lista.size() << endl;
return 0;
    
}

int iteration(list<int> lista,list<int> lista2)
{
list<int>::iterator it;
list<int>::iterator iat;
int b=0;
 if(lista.begin()==--lista.end()||lista2.begin()==--lista2.end())
   {
       cout<<*it<<*iat<<endl;
        if(lista.begin()==--lista2.end())
         return 1;
        else
         return --lista.end()==lista2.begin();
   }
it = lista.begin();iat=lista2.begin();
        
         while(it!=lista.end()&&iat!=lista2.end())
         {
          if(*it!=*iat){
                     b=0;
                       break;
             }
                    else b=1;    
                     it++,iat++;
         }           
 if(b)return 1;
     else{
             iat =--lista2.end();
             while(it!=lista.end()&&iat!=--lista2.begin())
             {
                      
             if(*it!=*iat){
                 b=0;
                   break;
                }
                else b=1;    
                 it++,iat--;
             }
        
        
    }
return b;
}

  • Amei 1
Link para o comentário
Compartilhar em outros sites

Sim , quase isso . Eu sei fazer em C mas quero ver com funções do c++.Mas o que eu realmente qro fazer eh o seguint.Dada duas listas

verificar se elas sao iguais . Caso nao  for, devemos verificar se fazendo uma corrida ao "contrário na segunda"(partindo do fim da 2ª até o inicio da 2ª) se  a comparação dela com a primeira lista eh igual.

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...