Как вставить число перед каждым узлом в списке (C)? - PullRequest
0 голосов
/ 30 июня 2019

По сути, я в списке, и мне нужно вставить число 999 перед каждым узлом (только когда узел четный).

Я мог бы сделать это с первым.Я также мог бы вставить номер после него.Но я не знаю, как вставить номер перед узлом.

Мне, вероятно, придется изменить функцию void insertar2, потому что в данный момент она вставляет новый номер после узла (не раньше, как я ожидаю).

#include <stdio.h>
#include <stdlib.h>
#include<time.h>

#define CANTIDAD_NUMEROS 10
#define DESDE 1
#define HASTA 10

typedef struct lista{
    int num;
    struct lista *sig;
 }nodo;


void crear (nodo *pt, int);
void mostrar(nodo *pt);
nodo* insertar1(nodo* );
nodo* eliminar1(nodo* );
void insertar2 (nodo* );
void eliminar2(nodo* );


int main()
{
    int i=0;
    nodo *prin;

    srand(time(NULL));  //Inicio la semilla para generar numeros aleatorios - una sola vez en el main

    prin=(nodo*)malloc(sizeof(nodo));
    crear(prin,i);
     //mostrar (prin);
    prin = insertar1(prin);
    insertar2(prin);
     mostrar (prin);



    return 0;
}

void crear (nodo *registro,int cont)
{

    registro->num = rand () % (HASTA-DESDE+1) + DESDE;

    if (cont==CANTIDAD_NUMEROS) //si cambia se convierte en 1
        registro->sig=NULL;
    else
    {

        registro->sig=(nodo*)malloc(sizeof(nodo));
        cont++;
        crear (registro->sig,cont);

    }
    return;
}

void mostrar (nodo *registro)
{
    if (registro->sig !=NULL)
    {
        printf ("%d\n",registro->num);
        mostrar (registro->sig);
    }
    return;
}


//modelos a utilizar... modificarlos segun el ejercicio.
nodo* insertar1(nodo *p)
{
    nodo *aux;
    if(p->num%2==0)
    {
        aux=(nodo *)malloc(sizeof(nodo));
        aux->num=999;//valor a insertar
        aux->sig=p;
        p=aux;
    }
    return p;
}

void insertar2 (nodo *p)
{nodo *aux;
    while(p->sig!=NULL)
    {
        if(p->num%2==0) //condicion de insercion
        {
            aux=(nodo *)malloc(sizeof(nodo));
            aux->num=999;//valor a insertar
            aux->sig=p->sig;
            p->sig=aux;

        }
        p=p->sig;
    }
}

Спасибо и извинитеесли испанские имена функций / переменных сбивают с толку.

1 Ответ

0 голосов
/ 30 июня 2019

предложить изменить;

nodo* insertar1(nodo *p)
{
    nodo *aux;
    if(p->num%2==0)
    {
        aux = malloc(sizeof(nodo));
        aux->num = 999;//valor a insertar
        aux->sig = p;
        p=aux;
    }
    return p;
}

для вставки нового узла перед записью, на которую указывает p.

nodo* insertar1(nodo *p)
{
    nodo *aux = malloc(sizeof(nodo));
    aux->sig  = p;
    aux->num  = p->num+1;

    if(p->num%2==0)
    {
        p->num = 999;
    }

    return aux;
}

, которая все еще нуждается в проверке ошибок для значения, возвращенного из malloc()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...