首页 > 解决方案 > 如何在列表(C)的每个节点之前插入一个数字?

问题描述

基本上,我在一个列表中,我必须在每个节点之前插入数字 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;
    }
}

抱歉,如果函数/变量的西班牙语名称令人困惑。

标签: c

解决方案


建议改变;

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()


推荐阅读