delete in a doubly linked list

but alternates elements , ie , the first element inserted into the left side and the second on the right and then the third element inserted into the right side again and the process , eg repeating : if I put A, B , C and D , print CAB , D and that is correct , but my problem is to eliminate because at first I had a delete hehco as a simple list that starting in the first and an auxiliary node out removing the first and assistant to move to the next until NULL, but my profesr said to take the elements will also be alternated , but except this time take out first the right and then the left (same as insert but inverted ) bone if my list now I 'm like CABD quedaria CAB and then quedaria as AB , but I did my delete and comes out is " segmentation fault " and I do not know what to do

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
  class list2 
{
	public:
	nodito *prim;				//como esta lista es doble enlazada use dos nodos uno ultimo y uno primero 
	nodito *ulti;
	int hhh,acum;
	
	list2 (){
		hhh = -1;
		acum=0;
		prim =NULL;
		ulti= NULL;
	}
	
	~list2 (){}
	void insert2 ( int hhh, string nombre_tar , int acum){
		
		nodito *n_new;
		n_new= new nodito (hhh, nombre_tar);
		n_new -> prox = NULL;
		n_new -> prev = NULL;
		if (( prim ==NULL) && (ulti ==NULL)){						//verifica si esta vacia
			prim = ulti= n_new;
		}else if (acum % 2 != 0) {								// si es impar lo coloca a la derecha
			n_new -> prox = prim;
			n_new -> prev = prim -> prev;
			prim -> prev = n_new;
			prim =n_new;
		}else {														//si es par lo coloca a la derecha
			n_new ->prox =ulti ->prox;
			n_new -> prev = ulti;
			ulti -> prox= n_new;
			ulti= n_new;
		}	
	
	}
	int get_prim2 () {
		return prim-> info; }
		
	string get_primnom () {
		return prim->nnombre ;}
	
	
	void eliminar2() { 										// me eliminara el primer nodo de la lista, y asi sucesiavemnte hasta vaciar la lista 
		nodito *obsoleto ;									
		obsoleto = new nodito ();
		obsoleto->prox = NULL;
		obsoleto->prev = NULL;
		
		if ((prim ==NULL) && (ulti ==NULL)) {
			cout<< "vacia"<<endl;
		}else if (acum %2 == 0){
			obsoleto= ulti ;
			ulti->prev = ulti->prox;
			ulti=ulti->prev;
			cout<<ulti->nnombre<<endl;
			delete (obsoleto);
		}else{ 
			obsoleto= prim;
			prim->prox = prim->prev;
			prim = prim->prox;
			cout<<prim->nnombre<<endl;
			delete (obsoleto);
		}
	}
	
	void imprimir2 () {						// esto es que me imprime toda la lista, para ver si los insertar funcionan correctamente
		nodito *ayuda ;
		ayuda = new nodito ();
		ayuda= prim ;
		if (prim ==NULL)
		{
			cout<< "vacia"<<endl;
		}
		
		while (ayuda!=NULL){
			cout<<ayuda->nnombre<<endl;
			ayuda=ayuda->prox;
		}
	}
	
};
> delete in a doubly linked list but alternates elements , ie , the first element inserted
Supongo que con "delete" quieres decir "eliminar", por lo que me confunde que después hables de "insertar".
También podría ser el operador delete, pero por qué necesitarías liberar memoria si lo que quieres es agregar nodos.

> the first element inserted into the left side
> and the second on the right and then
> the third element inserted into the right side again
¿Cómo sigue tu secuencia: izquierda, derecha, derecha, ... ?
Tampoco entiendo lo de lado, puede ser adelante o detrás de un nodo, o referirse a los nodos extremos inicial y final, o dividir a la lista en dos (por ejemplo, para mergesort)


No comprendo tu descripción. ¿Cuál es el objetivo del programa?, ¿cómo es que falla?, ¿dónde puede estar el error?
No hace falta que todo esté en el mismo párrafo.


Sobre tu código
1
2
// si es impar lo coloca a la derecha (línea 24)
//si es par lo coloca a la derecha (línea 29) 
¿siempre lo coloca a la derecha?

void eliminar2() { // me eliminara el primer nodo de la lista, y asi sucesiavemnte hasta vaciar la lista
un mejor nombre sería 'vaciar'

1
2
3
n_new= new nodito (hhh, nombre_tar);
n_new -> prox = NULL; //esto puede ser trabajo para el constructor de 'nodito'
n_new -> prev = NULL;


Falta la definición de 'nodito' y el código cliente (main)


PS: google translate sucks
Topic archived. No new replies allowed.