c - 如何在列表(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;
}
}
抱歉,如果函数/变量的西班牙语名称令人困惑。
解决方案
建议改变;
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()
推荐阅读
- c# - 从 Hotfix 到 Dev 分支的 PRing 问题
- macros - 有没有办法编写一个以某种方式避免预处理器预扫描扩展的宏模式?
- python - 桌面python脚本检索发送到android设备的短信
- django - 匿名用户在使用 simplejwt 访问 rest-api 时遇到
- html - Django:无法解析余数:'{{' from '{{
- java - 为什么拥有 maven-resources-plugin 2.6 版的 mvn 插件会抱怨 maven-resources-plugin:2.6:testResources 失败?
- reactjs - 在 React Mapbox 上实现英制单位
- java - 为什么我不能使用与 java.file 不在同一活动中的按钮?
- python-3.x - vscode 测试错误
- javascript - 按日期对表行进行排序,比较种子文件中的 DateTime 和 Date.now()