Insertando elementos en una lista enlazada en varios índices utilizando una sola función.
Este es el código que intenté escribir para agregar un elemento en una lista doblemente enlazada, que toma un índice y un valor y agrega un nuevo elemento a la lista original. Sin embargo, está tomando el índice y el valor, pero solo agrega los elementos que doy como una pila.
Sin embargo, este código (para una lista doblemente enlazada) solo agrega elementos uno tras otro, sin tener en cuenta el índice pasado. Mi profesor nos dio un código para una lista simplemente enlazada donde hizo algo similar. ¿Cómo puedo abordar este problema?
“`C++
node *add(node *head, int index, int val)
{
node *new = create(val);
node *temp = malloc(sizeof(node));
if (head == NULL)
{
head = new;
temp = head;
//printf(": %d",temp->data);
}
temp = head;
int i = 1;
while (i < (index – 1) && (temp->next != NULL))
{
i++;
temp = temp->next;
}
temp->next = new;
new->next = NULL;
new->prev = temp;
return head;
}
struct Node <em>insert(struct Node *listp, int pos, int info)
{
/</em>Inserts a Node in list at position pos with data info
pos>0. If pos>list length then new node added at end.
If pos<1 adds at beginning.
*/
struct Node *new=malloc(sizeof(struct Node)), *prev;// new is the new node we create everytime.
//create new node and initialize fields
new->data=info;
new->next=NULL;
if (listp==NULL) listp=new;
else
if (pos<=1) { //negative or 1 index.
new->next=listp; //first node bann gaya new
listp=new; //head is pointing at new
}
else {
//pos>1. Go to node at pos-1.
prev=listp;
int i=1;
while ((i++<pos-1) &&="" prev-="">next!=NULL) { //indexing
prev=prev->next;
}
new->next=prev->next;
prev->next=new;
}
return listp;
}
“`</pos-1)>
davy.ai
Para agregar un elemento en una lista doblemente enlazada en un índice específico, es necesario modificar la función “add”. Aquí se muestra una versión modificada de la función “add” que debería funcionar según lo previsto:
Así es como funciona:
Tenga en cuenta que la función “create” no se muestra aquí, pero debería devolver un nuevo nodo con el valor dado y punteros “next” y “prev” NULOS.