Código:
struct node {
string data;
struct node* prev;
struct node* next;
};
El problema es que tengo que hacer una lista doblemente ligada circular, que no tengo problema al crearla de la siguiente manera:
Código:
#include <iostream>
#include <stdlib.h>
using namespace std;
int main()
{
struct node* head = makeNode();
head->data = "Juan";
struct node* newnode = makeNode();
newnode->data = "Carlos";
struct node* temp = head->next;
newnode->next = temp;
newnode->prev = head;
head->next = newnode;
newnode->prev = head->next;
Print(head);
Print(newnode);
return 0;
}
Corrida de escritorio:
node->prev: 0x6000009782a0
node->data: Juan
node->next: 0x6000009782d0
node->prev: 0x6000009782d0
node->data: Carlos
node->next: 0x6000009782a0
donde se cumple que el 'siguiente' de el ultimo nodo es la direccion de el 'anterior' del primer nodo.
pero al momento de ponerlo en una funcion, todo truena como siempre en los metodos no soy tan habilidoso.
Código:
struct node* addEnd(struct node* head, string data)
{
struct node* newnode = makeNode();
if(head == NULL)
{
head = newnode;
return newnode;
}
else
{
struct node* temp = head->next;
newnode->next = head;
head->next = newnode;
newnode->prev = head->next;
return head;
}
}
algun alma bendita que me pueda ayudar porfavor llevo como dos semanas intentado que funcione, pero lo maximo que he logrado es sin usar funciones.
tambien intente lo siguiente en el metodo de addEnd():
Código:
temp = head;
while(temp->next !=head)
{
temp = temp->next;
}