Dev - C++ - contar el total de números impares en una lista con puntero

 
Vista:

contar el total de números impares en una lista con puntero

Publicado por Francisco (1 intervención) el 30/06/2017 00:55:14
Buenas tardes compañeros;

Tengo este problema estuve haciendo este código en c++ con punteros pero me trabe al momento de llamar el total de números impares espero y me puedan ayudar aquí les dejo el código
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
#include "stdafx.h"
#include <iostream>
 
using namespace std;
 
struct nodo
{
	int num;
	nodo *siguiente;
};
 
typedef nodo *LISTA;
LISTA n = NULL;
 
void insertar(LISTA &puntero, int numero)
{
	LISTA puntero1,puntero2;
	puntero1 = puntero;
	if (puntero1==NULL)
	{
		puntero1 = new nodo;
		puntero1->num = numero;
		puntero1->siguiente=NULL;
		puntero = puntero1;
	}
	else
	{
		while (puntero1->siguiente!=NULL)
		{
			puntero1 = puntero1->siguiente;
		}
		puntero2 = new nodo;
		puntero2->num = numero;
		puntero2->siguiente = NULL;
		puntero1->siguiente = puntero2;
	}
}
 
void mostrar_lista(LISTA puntero)
{
 
	if (puntero == NULL)
	{
		cout << "La lista esta vacia";
	}
 
	while (puntero!=NULL)
	{
		cout << puntero->num << endl;
		puntero = puntero->siguiente;
	}
}
 
// aqui ya no pude solucionarlo
 
int contraimpares(LISTA &puntero)
{
	int suma=0;
 
	if (puntero == NULL)
	{
		cout << "La lista esta vacia";
	}
	while (puntero->num % 2 != 0)
	{
			puntero = puntero->siguiente;
                        suma++;
	}
 
	return suma;
}
 
void main()
{
	int num_elem,numero,i;
 
	cout << "Dame el numero de elementos de la lista" << endl;
	cin >> num_elem;
 
	for (i = 0; i < num_elem; i++)
	{
		cout << "Dame el numero: " << endl;
		cin >> numero;
		insertar(n,numero);
	}
	cout << "Lista capturada" << endl;
	mostrar_lista(n);
	cout << "Los numeros impares en la lista son: " << contraimpares(n) << endl;
	system("pause");
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de gregory
Val: 82
Ha disminuido 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

contar el total de números impares en una lista con puntero

Publicado por gregory (34 intervenciones) el 01/07/2017 07:26:08
Ya se cual es el problema. Las lista enlazada a diferencia de los array no tiene posiciones. Por lo que siempre hay que recorrela desde el inicio hasta el ultimo.

Es por eso que tiene que tener una variables por parametro o global las dos forma sirve. que te guarde la direccion del el primer nodo.

Para asi recorrelo siempre que lo necesite hacer. Por eso te traba tu programa comienza a recorrelo desde null y sigue null y sigue null infinitamente.

te recomiendo usar lista o struct auxiliares que guarden el nodo primero y el nodo ultimo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar