48 lines
968 B
OCaml
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 ""
|
|
;;
|