mp2i-info/tp7/exo5.ml
2026-01-15 20:55:39 +01:00

48 lines
968 B
OCaml

type 'a lc = {
mutable tete : 'a option;
mutable suivant : 'a lc option
};;
let creer_lc () = {
tete=None;
suivant=None;
};;
let rec taille_lc l = match l with
| {
tete = None;
suivant = None
} -> 0
| {suivant = None; _} -> 1
| {suivant = Some s; _} -> 1 + (taille_lc s)
;;
let rec acces_lc l i = match l,i with
| {tete=Some t;_}, 0 -> t
| {suivant=Some s;_}, i when i>0 -> acces_lc s (i-1)
| _ -> invalid_arg ""
;;
let rec inserer_lc l i x = match l,i with
| {suivant=s;_}, 0 ->
l.suivant <- Some {
tete=Some x;
suivant=s
}
| {suivant=Some s;_}, i ->
inserer_lc s (i-1) x
| _ -> invalid_arg ""
;;
let rec retirer_lc l i = match l,i with
| {suivant=Some s;_}, 0 ->
l.tete <- s.tete;
l.suivant <- s.suivant
| {suivant=None;_}, 0 ->
l.tete <- None
| {suivant=Some {suivant=s;_};_}, 1 ->
l.suivant <- s
| {suivant=Some s;_}, i -> retirer_lc s (i-1)
| _ -> invalid_arg ""
;;