gpt4 book ai didi

c - 如何在输出中获得 0?

转载 作者:太空宇宙 更新时间:2023-11-04 01:50:33 25 4
gpt4 key购买 nike

所以我正在使用以下类型:

typedef struct lligada {
int valor;
struct lligada *prox;
} *LInt;

我正在尝试做一个函数,它接受一个 LInt(有序的)并消除重复的,我还需要释放重复的。

所以我解决这个问题的函数是:

void remreps (LInt l){
LInt aux;
aux =l;

for (; l!=NULL; ){

if ((l->prox!=NULL) && (l->valor == (l->prox)->valor)) {
free (l);
l=aux->prox;
aux=l;
}

else {
l=l->prox;
aux=l;
}
}
}

它在第二次测试中失败了(使用代码板,因为大学告诉我这样做)。

Input: [  2  2 ]
Output: expected [ 2 ]
obtained [ 0 2 ]

为什么我在输出中得到这个 0?

最佳答案

尝试下面的函数定义。

void remreps( LInt l )
{
while ( l != NULL && l->prox != NULL )
{
if ( l->valor == l->prox->valor )
{
LInt tmp = l->prox;
l->prox = l->prox->prox;
free( tmp );
}
else
{
l = l->prox;
}
}
}

这是一个演示程序

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

typedef struct lligada {
int valor;
struct lligada *prox;
} *LInt;

void remreps( LInt l )
{
while ( l != NULL && l->prox != NULL )
{
if ( l->valor == l->prox->valor )
{
LInt tmp = l->prox;
l->prox = l->prox->prox;
free( tmp );
}
else
{
l = l->prox;
}
}
}


LInt push( LInt l, int valor )
{
LInt tmp = malloc( sizeof( *l ) );

tmp->valor = valor;
tmp->prox = l;

return tmp;
}

void output( LInt l )
{
for ( ; l != NULL; l = l->prox )
{
printf( "%d ", l->valor );
}
}

int main(void)
{
LInt l = NULL;

l = push( l, 2 );
l = push( l, 2 );

output( l );
putchar( '\n' );

remreps( l );

output( l );
putchar( '\n' );

return 0;
}

它的输出是

2 2 
2

关于c - 如何在输出中获得 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44050708/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com