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

标签 c list pointers struct singly-linked-list

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

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/

相关文章:

c# - 如何在 C# 中获取二维数组列表的最大值/最小值

java - 将列表作为可变参数传递

java - 如何将元素添加到链表末尾

c - 在 C 中的 vector 函数序列中避免(初学者)分配错误

c++ - 关于 "Address-of operator"(&)和c、c++中数组的问题

c - 有没有办法编写更好的代码来对 C 中的结构进行排序?

c++ - 为什么 NULL 指针在 C 和 C++ 中的定义不同?

c++ - 如何使用 2 个字符形成 ASCII(十六进制)数字?

c++ - 尝试解除分配 char 数组 : _BLOCK_TYPE_IS_VALID(pHead->nBlockUse) 的指针时出错

c++ - 通过指针传递引用