1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
|
#include <stdio.h>
struct node
{
int value;
struct node *next;
};
static void display (struct node const *head)
{
struct node const *p = head;
while (p != NULL)
{
printf ("%2d", p->value);
p = p->next;
}
printf ("\n");
}
void unique (struct node *head)
{
/* 1. Si la liste est vide ou a un seul élément, STOP */
if (head != NULL && head->next != NULL)
{
/* 2. Precedent <- La tête de la liste */
struct node *prec = head;
/* 3. Courant <- Le second de la liste */
struct node *curr = head->next;
/* 4. Tant que Courant n'est pas le pointeur nul */
while (curr != NULL)
{
/* 5. Si la valeur de Courant est la même que celle de Precedent */
if (curr->value == prec->value)
{
/* 6. Faire Precedent.Suivant=Courant.Suivant */
prec->next = curr->next;
/* 7. Supprimer Courant */
/* a faire dans une application reelle */
/* 8. Courant <- Precedent.Suivant */
curr = prec->next;
/* 9. Sinon */
}
else
{
/* 10. Precedent <- Courant */
prec = curr;
/* 11. Courant <- Courant.Suivant */
curr = curr->next;
/* 12. Fin si */
}
}
}
}
int main (void)
{
static struct node list[] = {
{1, list + 1},
{1, list + 2},
{2, list + 3},
{2, list + 4},
{2, list + 5},
{3, list + 6},
{3, NULL},
};
display (list);
unique (list);
display (list);
return 0;
} |
Partager